创建类的静态属性(属性是同一类的实例)

时间:2018-11-27 11:40:39

标签: python oop static

假设我有一个定义如下的类:

class Foo():
   baz = None
   def __init__(self, bar):
       self.bar = bar

现在,在该示例中,Foo.bazNone。现在,我们假设此类属性必须是Foo的实例,如下所示:

class Foo():
    baz = Foo("baz")
    def __init__(self, bar):
        self.bar = bar

我将如何进行?

类似地,有什么方法可以创建“类属性”。我知道我可以分配一个lambda函数,以将类的新实例返回给class属性,但我宁可不必编写括号。

1 个答案:

答案 0 :(得分:2)

如果您甚至想在更早定义baz = Foo("baz")之前就在类内使用行Foo;这是不可能的,例如Python会向您抛出NameError: name 'Foo' is not defined,但这是一种实现您想要的解决方法:

class Foo:
   def __init__(self, bar):
       self.bar = bar
Foo.baz=Foo('foo')

现在Foo.bazFoo类的实例,并且bazFoo类的类属性,因此将被该类的所有实例继承以及:

myFoo = Foo('myFoo')

您可以验证myFoo.baz.bar是真实的'foo'而不是'myFoo'

print(myFoo.bar) 
# myFoo
print(myFoo.baz.bar)
# foo

还要注意,这将导致Foo.bazFoo.baz.bazFoo.baz.baz.baz等都是Foo对象,因为Foo.baz的值为{{1} },即Foo('foo')类和Foo的对象也是baz的类属性。