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

标签 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 函数分配给类属性,但我不想编写括号。

最佳答案

如果您想在类中使用 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 的类属性code> 类,因此也将被该类的所有实例继承:

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 具有值 Foo('foo')Foo 的对象class 和 baz 也是 Foo 的类属性。

关于python - 创建类的静态属性(属性是同一类的实例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53498855/

相关文章:

javascript - 从单独的文件扩展 JavaScript 类

c++ - 通用树的析构函数

python - 为什么 HTTPSConnectionPool 不工作而 PoolManager 工作?

python - 如何进行 django 模型查询

java - 如何以 "OOP"方式处理同时独立运行的多个类实例?

c# - 非静态类中的静态方法和静态类中的静态方法有什么区别?

php - 将过程式 PHP 转换为面向对象的 PHP

python - 使用 --user 安装时 pip 位于何处?

java - 向 ArrayList<Integer> 实例添加值只能按顺序完成

go - 这段代码中/static/是什么意思?