我正在创建一个我想要作为单独类的类成员的类,以便第二个类的所有实例都可以访问第一个类。目前我有一些看起来像这样的东西:
class A:
def __init__(self):
print "In Constructor!"
class B:
ClassA = ''
def __init__(self, InstanceA):
self.ClassA = InstanceA
然而,当我尝试使用ClassA
类变量时,我得到投诉说“str对象没有属性......”。有没有办法用B
的参数构造类InstanceA
,然后以某种方式将其设置为类变量?或任何其他解决方案!
答案 0 :(得分:1)
您没有在B.__init__
中分配类属性,只是设置新的实例属性 - B.ClassA
仍为''
(None
将是一个更明智的起始值,顺便说说)。
最小修正是:
class B:
ClassA = None
def __init__(self, InstanceA):
self.__class__.ClassA = InstanceA # or B.ClassA = ...
但请注意,每次创建新实例时都会更改class属性。
根据您的评论,这样的事情可能会更有帮助:
class B:
ClassA = None
@classmethod
def set_class_attr(cls, instance):
cls.ClassA = instance
然后您可以使用:
B.set_class_attr(A()) # set class attribute once
b = B() # don't need to pass in new A instances when creating B instances
b.ClassA. # ...
根据您想要的行为,您可以检查该类方法是否已设置实例,例如如果用户尝试重置错误,则raise
会出错。