Значения для атрибута, не назначенного правой переменной - PullRequest
0 голосов
/ 28 мая 2018

Извините за смутное название, я не совсем понял, как его произнести:

Допустим, у нас есть класс, и он содержит словари, встроенные в больший словарь.

class AnObject(object):

    grail = {'Grail' : '', 'Quest' : ''}
    spam = {'More spam' : '', 'Less spam' : ''}
    parrot = {'More parrot' : '', 'Less parrot' : '', 'Grail' : grail}
    egg = {'Spam' : spam, 'Parrot' : parrot }

Затем мы хотим назвать эти атрибуты другими именами

self.egg = egg
self.parrot = egg['Parrot']
self.moreparrot = self.parrot['More parrot']

Это приведет к правильному расположению, но по какой-то причине я нахожу ...

>>>knight = AnObject()
>>>knight.moreparrot = x
>>>knight.moreparrot
x
>>>knight.egg
{'Parrot' : {'More parrot' : '', 'Less parrot' : ''}...}

Но это прекрасно работает:

>>>knight.egg['Parrot']['More parrot'] = x
>>>knight.egg['Parrot']['More parrot']
x
>>>knight.egg
{'Parrot' : {'More parrot' : '', 'Less parrot' : ''}...}

Они должны указывать на одну и ту же переменную, но я получаю разные результаты.Как получилось?

Редактировать:

Это может быть совершенно случайным, но по какой-то причине спам непротиворечив.

self.egg = egg
self.spam = egg['Spam']
self.morespam = self.spam['More spam']

>>>knight = AnObject()
>>>knight.morespam = x
>>>knight.morespam
x
>>>knight.egg['Spam']['More spam']
x
>>>knight.egg
{'Spam' : {'More spam' : 'x', 'Less spam' : ''}...}
...