假设我有一个定义如下的类:
class Foo():
baz = None
def __init__(self, bar):
self.bar = bar
现在,在该示例中,Foo.baz
是None
。现在,我们假设此类属性必须是Foo
的实例,如下所示:
class Foo():
baz = Foo("baz")
def __init__(self, bar):
self.bar = bar
我将如何进行?
类似地,有什么方法可以创建“类属性”。我知道我可以分配一个lambda函数,以将类的新实例返回给class属性,但我宁可不必编写括号。
答案 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.baz
是Foo
类的实例,并且baz
是Foo
类的类属性,因此将被该类的所有实例继承以及:
myFoo = Foo('myFoo')
您可以验证myFoo.baz.bar
是真实的'foo'
而不是'myFoo'
print(myFoo.bar)
# myFoo
print(myFoo.baz.bar)
# foo
还要注意,这将导致Foo.baz
,Foo.baz.baz
,Foo.baz.baz.baz
等都是Foo
对象,因为Foo.baz
的值为{{1} },即Foo('foo')
类和Foo
的对象也是baz
的类属性。