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

时间:2016-03-31 02:15:37

标签: python oop

我在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_()父

3 个答案:

答案 0 :(得分:2)

没有instances of Parent被实例化(Parent())。但是,实例化了描述Parent类的class objectclass Parent)。它将在处理时执行所有类对象初始化语句和方法定义。

答案 1 :(得分:1)

假设您在实例化类之前询问为什么静态类成员具有值,这是因为类的静态成员基本上独立于类。由于静态成员根据定义并不与实例绑定,为什么它们需要实例才能存在?

答案 2 :(得分:0)

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

在导入类属性引用添加到

class.__dict__ 

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