>>> class Abcd:
... a = ''
... menu = ['a', 'b', 'c']
...
>>> a = Abcd()
>>> b = Abcd()
>>> a.a = 'a'
>>> b.a = 'b'
>>> a.a
'a'
>>> b.a
'b'
Это все правильно, и каждый объект имеет свой собственный «а», но ...Python. Странное поведение атрибутов класса
>>> a.menu.pop()
'c'
>>> a.menu
['a', 'b']
>>> b.menu
['a', 'b']
Как это могло произойти? И как использовать список как атрибут класса?
Вы определенно не первый, чтобы работать в этом. Я помню, как впервые попал в эту проблему: мне потребовались дни, чтобы понять, в чем проблема. Это имеет смысл, как только вы это узнаете, но я лично считаю, что это действительно неинтуитивно. –
@musicfreak: Я действительно не понимаю, почему люди смущены этим. Изучая любой пример OO в любом учебнике, вы узнаете об этом. Почему каждый предпочитает тратить «дни» вместо того, чтобы инвестировать несколько часов, чтобы прочитать учебник, вне меня. – nikow
-1: Для этого есть много дубликатов. – nikow