栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么属性引用在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))

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/646658.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号