python - 创建类的静态属性(属性是同一类的实例)
问题描述
假设我有一个定义如下的类:
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 函数分配给类属性,但我宁愿不必写括号。
解决方案
如果您想在更早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
。
推荐阅读
- c# - 时间:2019-05-10 标签:c#get info from query that exist or was created
- objective-c - 符合 Objective-C 中类别的协议
- php - 除了选定的列之外,如何使用 PDO 将所有列从 DB 提取到模型?
- mvvm - Xamarin Forms - 根据列表中的存在情况将绑定设置为颜色
- c++ - 如何在链表中生成唯一 ID?
- html - 使用 HTML5 使用 Edge 进行视频录制
- python-3.x - 使用 Python 3 配置 CDH 集群
- python-3.x - 从具有相同键的列表中创建元组字典
- python - Django - 在管理页面中更改自定义用户模型时,外键约束失败
- scala - 类型不匹配 - Array[Map[String,Array[Map[String,Long]]]]