首页 > 解决方案 > 创建类的静态属性(属性是同一类的实例)

问题描述

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

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 函数分配给类属性,但我宁愿不必写括号。

标签: pythonoopstatic

解决方案


如果您想在更早baz = Foo("baz")定义之前在类中使用该行Foo;这是不可能的,即 Python 会向NameError: name 'Foo' is not defined你抛出一个问题,但这里有一个解决方法来实现你想要的:

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

NowFoo.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具有值Foo('foo'),即类的对象,Foo也是baz的类属性Foo


推荐阅读