类实例作为python中的类变量

时间:2014-09-30 10:35:24

标签: python class class-variables

我正在创建一个我想要作为单独类的成员的类,以便第二个类的所有实例都可以访问第一个类。目前我有一些看起来像这样的东西:

class A:
    def __init__(self):
        print "In Constructor!"

class B:
    ClassA = ''
    def __init__(self, InstanceA):
        self.ClassA = InstanceA

然而,当我尝试使用ClassA类变量时,我得到投诉说“str对象没有属性......”。有没有办法用B的参数构造类InstanceA,然后以某种方式将其设置为类变量?或任何其他解决方案!

1 个答案:

答案 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会出错。