我刚开始学习 python(来自 C);我发现自己对属于一个类的变量的定义方式感到非常困惑(不管是“类类型”还是“实例类型”,我的问题更基本)。到目前为止,我已经尝试了这些代码行:
class A:
pass
A.a = 1
A.b = 2
print(A.a+A.b)
这段代码出乎意料地返回了“3”(而我预计会出现错误),这将我带到了这里。我不明白为什么解释器能够推断出属于类“A”的变量(我从未定义过)。
从 C 的角度来看,假设 Python 属性存储在哈希表中,因此可以在运行时动态修改和查询。
考虑一下:
class A:
pass
print(A.__dict__)
{'__module__': '__main__', '__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None}
当你修改 A
时,你正在修改它的 __dict__
member :
A.a = 1
print(A.__dict__)
{'__module__': '__main__', '__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None, 'a': 1}
注意它现在如何包含 a
print(A.__dict__['a'])
1
我是一名优秀的程序员,十分优秀!