类 B 和 C 都派生自基类 A,并且都没有覆盖 A 的方法 test()。B与A在同一个模块中定义;C 在单独的模块中定义。调用 B.test() 打印“hello”,但调用 C.test() 失败是怎么回事?两个调用不应该最终执行 A.test() 并因此能够解析 mod1 命名空间中的符号“消息”吗?
我也很感激收到有关记录此行为的位置的提示,因为我无法找到任何东西。调用 C.test() 时如何解析名称,并且可以以某种方式将“消息”注入其中一个名称空间吗?
FWIW,我没有使用实例变量(例如 set A.message = "hello")的原因是因为我想访问一个“全局”单例对象并且不想在其中有一个明确的引用所有其他对象。
mod1.py:
import mod2
class A(object):
def test(self):
print message
class B(A):
pass
if __name__ == "__main__":
message = "hello"
A().test()
B().test()
mod2.C().test()
mod2.py:
import mod1
class C(mod1.A):
pass
输出是:
$ python mod1.py
hello
hello
Traceback (most recent call last):
File "mod1.py", line 14, in <module>
mod2.C().test()
File "mod1.py", line 5, in test
print message
NameError: global name 'message' is not defined
非常感谢!