您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

为什么属性引用在Python继承中表现得像这样?

为什么属性引用在Python继承中表现得像这样?

没错,somedata在类的所有实例及其子类之间共享,因为它是在类 定义 时创建的。线

somedata = {}
somedata['was_false_in_base'] = False

在定义类时即在解释器遇到class语句时执行- 在创建实例时执行(请考虑Java中的静态初始化程序块)。如果类实例中不存在属性,则检查类对象的属性

类定义时,您可以运行任意代码,如下所示:

 import sys
 class Test(object):
     if sys.platform == "linux2":
         def hello(self):
              print "Hello Linux"
     else:
         def hello(self):
              print "Hello ~Linux"

在Linux系统上,test().hello()将打印Hello Linux,在所有其他系统上,将打印其他字符串。

相反,in__init__的对象是在 实例化 时创建的,并且仅属于实例(将它们分配给时self):

class Test(object):
    def __init__(self):
        self.inst_var = [1, 2, 3]

在许多情况下,在类对象而不是实例上定义的对象很有用。例如,您可能想要缓存类的实例,以便可以共享具有相同成员值的实例(假定它们是不可变的):

class SomeClass(object):
    __instances__ = {}

    def __new__(cls, v1, v2, v3):
        try:
            return cls.__insts__[(v1, v2, v3)]
        except KeyError:
            return cls.__insts__.setdefault(
               (v1, v2, v3), 
               object.__new__(cls, v1, v2, v3))

通常,我在类主体中将数据与元类或通用工厂方法结合使用。

python 2022/1/1 18:47:23 有329人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶