Python 创建类的静态属性(属性是同一类的实例)
假设我有一个定义如下的类:Python 创建类的静态属性(属性是同一类的实例),python,oop,static,Python,Oop,Static,假设我有一个定义如下的类: class Foo(): baz = None def __init__(self, bar): self.bar = bar 现在,在这个例子中,Foo.baz是None。现在让我们假设这个class属性需要是Foo的一个实例,如下所示: class Foo(): baz = Foo("baz") def __init__(self, bar): self.bar = bar 我将如何进行 类似地,是否有
class Foo():
baz = None
def __init__(self, bar):
self.bar = bar
现在,在这个例子中,Foo.baz
是None
。现在让我们假设这个class属性需要是Foo
的一个实例,如下所示:
class Foo():
baz = Foo("baz")
def __init__(self, bar):
self.bar = bar
我将如何进行
类似地,是否有任何方法可以创建“类属性”。我知道我可以分配一个lambda函数,将类的新实例返回给class属性,但我不想写括号。如果您想在类中使用行
baz=Foo(“baz”)
,甚至在前面定义Foo
之前;ie Python不可能向您抛出一个NameError:name'Foo'没有定义,但这里有一个解决方法来实现您的目标:
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
等。所有这些都是Foo
对象,因为Foo.baz
具有值Foo('Foo')
即Foo
类的对象,baz
也是Foo
的类属性