未定义变量不会在定义了该名称的迭代范围内引发错误

问题描述 投票:1回答:1

使用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”。

这可能是CPython错误吗?

python class dictionary scope cpython
1个回答
0
投票

如评论中所说,做

© www.soinside.com 2019 - 2024. All rights reserved.