在Python中,当类没有实例化时,为什么要读取静态类成员?

2024-05-20 21:01:03 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python中看到以下行为我有点惊讶。没有被调用的类被打开并且它们的静态成员被读取是有原因的吗

测试\u.py

import unittest
from tests.family import Parent

class Test(unittest.TestCase):
    def testParent(self):
        bob = Parent()

if __name__ == "__main__":
    unittest.main()

家庭.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")

输出为:

父常量属于父常量

属于Child的Child常量

朋友永远属于朋友

\初始化\父


Tags: toselffriendchildformatinitdefunittest
3条回答

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

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

class.__dict__ 

对象(例如family.py)

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

没有instances of ^{}被实例化(Parent())。但是,描述Parent类的class object被实例化(class Parent)。它将在处理过程中执行所有类对象初始化语句和方法定义

相关问题 更多 >