在 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'