неопределенная переменная не вызывает ошибку, если в области итерации с этим именем определено - PullRequest
1 голос
/ 20 апреля 2020

Используя CPython 3.8.2+ ( 984a5 , следующий код выполняется без возникновения ошибки. В результате получается словарь, который печатает, как если бы он имел значения, которые являются экземплярами с одинаковыми сохраненное значение.

class Foo(object):
    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return name  # this is undefined (missing `self.`)


optable = dict()
for name in ['a', 'b']:
    optable[name] = Foo(name)
print(optable)
print(optable['a'].name)
print(optable['b'].name)

Этот сценарий печатает

{'a': b, 'b': b}
a
b

Неожиданно оба представления печатаются и обозначаются буквой "b".

Может ли это быть C Python ошибка?

1 Ответ

0 голосов
/ 20 апреля 2020

Как сказано в комментариях, убедитесь, что вы возвращаете имя, которое принадлежит каждому экземпляру Foo

    def __repr__(self):
        return self.name

, чтобы предотвратить возврат глобального name вместо.

Также Убедитесь, что вы используете правильный метод для представления объекта

...