我在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")
输出是:
属于父
的父常量属于儿童的儿童常量
属于朋友的朋友常量
__ init_()父
答案 0 :(得分:2)
没有instances of Parent
被实例化(Parent()
)。但是,实例化了描述Parent
类的class object(class Parent
)。它将在处理时执行所有类对象初始化语句和方法定义。
答案 1 :(得分:1)
假设您在实例化类之前询问为什么静态类成员具有值,这是因为类的静态成员基本上独立于类。由于静态成员根据定义并不与实例绑定,为什么它们需要实例才能存在?
答案 2 :(得分:0)
我无法找到一个很好的参考资料来详细解释这个过程,但我可以从中收集:
在导入类属性引用添加到
class.__dict__
模块中每个类的对象(例如family.py)。