在 Python 中,我可以在运行时更改 class 的结构吗?
In Python can I change the structure of a class at runtime?
在 Python 中,您可以像这样在运行时向 class 的实例添加新的实例变量...
>> class Foo:
>> def __init__(self, bar):
>> self.bar = bar
>>
>> f = Foo()
>> setattr(f, "baz", "spam")
>> f.baz
"spam"
...但它只对实例 f
没有影响 class foo
.
>> x = Foo()
>> x.baz
AttributeError: 'Foo' object has no attribute 'baz'
有没有办法将新实例变量 baz
添加到 class Foo
,以便 class 的所有新实例都具有新变量?
您可以设置 class 的属性而不是实例。
setattr(Foo, "baz", "spam")
输出
>>> class Foo:
... def __init__(self, bar):
... self.bar = bar
>>> f = Foo('bar')
>>> setattr(Foo, "baz", "spam")
>>> f.baz
'spam'
>>> f2 = Foo('bar')
>>> f2.baz
'spam'
在 Python 中,您可以像这样在运行时向 class 的实例添加新的实例变量...
>> class Foo:
>> def __init__(self, bar):
>> self.bar = bar
>>
>> f = Foo()
>> setattr(f, "baz", "spam")
>> f.baz
"spam"
...但它只对实例 f
没有影响 class foo
.
>> x = Foo()
>> x.baz
AttributeError: 'Foo' object has no attribute 'baz'
有没有办法将新实例变量 baz
添加到 class Foo
,以便 class 的所有新实例都具有新变量?
您可以设置 class 的属性而不是实例。
setattr(Foo, "baz", "spam")
输出
>>> class Foo:
... def __init__(self, bar):
... self.bar = bar
>>> f = Foo('bar')
>>> setattr(Foo, "baz", "spam")
>>> f.baz
'spam'
>>> f2 = Foo('bar')
>>> f2.baz
'spam'