在Python中,为什么静态类成员在类尚未实例化时读取



在Python中看到以下行为时,我有点惊讶。打开未调用的类并读取其静态成员是否有原因?

test_inheritance.py

import unittest
from tests.family import Parent
class Test(unittest.TestCase):
    def testParent(self):
        bob = Parent()
if __name__ == "__main__":
    unittest.main()

family.py

class Parent(object):
    CONSTANT = "Constant belonging to Parent"
    print("Parent {0}".format(CONSTANT))
    def __init__(self):
        print(">>__init_() Parent")
class Child(Parent):
    CONSTANT = "Constant belonging to Child"
    print("Child {0}".format(CONSTANT))
    def __init__(self):
        print(">>__init_() Child")
class Friend(object):
    CONSTANT = "Constant belonging to Friend"
    print("Friend {0}".format(CONSTANT))
    def __init__(self):
        print(">>__init_() Friend")

输出为:

属于父的父常量

属于子的子常数

属于Friend 的Friend常量

__init_()父

没有实例化Parent的实例(Parent())。然而,描述Parent类的类对象被实例化(class Parent)。它将在处理过程中执行所有类对象初始化语句和方法定义。

假设您要问为什么静态类成员在类实例化之前就有值,这是因为类的静态成员本质上独立于类而存在。既然静态成员在定义上并没有绑定到实例,为什么它们需要先存在一个实例才能绑定呢?

我找不到一个很好的参考资料来详细解释这个过程,但我可以收集到:

导入时,类属性引用被添加到

class.__dict__ 

模块中每个类的对象(例如family.py)。

相关内容

最新更新