В Python можно ли изменить структуру класса во время выполнения? - PullRequest
0 голосов
/ 19 апреля 2020

В Python вы можете добавлять новые переменные экземпляра к экземпляру класса во время выполнения, как это ...

>> class Foo:
>>     def __init__(self, bar):
>>         self.bar = bar
>> 
>> f = Foo()
>> setattr(f, "baz", "spam")
>> f.baz
"spam"

... но это влияет только на экземпляр f, но не класс foo.

>> x = Foo()
>> x.baz
AttributeError: 'Foo' object has no attribute 'baz'

Есть ли способ добавить новую переменную экземпляра baz в класс Foo, чтобы все новые экземпляры этого класса имели новую переменную?

1 Ответ

5 голосов
/ 19 апреля 2020

Вы можете установить атрибут класса вместо экземпляра.

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