关于Python的Object继承

''' class x(object):python

__se = None
a = None

def __new__(cls):
    if cls.__se is None:
        cls.__se = super(x, cls).__new__(cls)
    return cls.__se

def __init__(self):
    print id(self)

if name == 'main': a = x() a.a=1 b = x() print b.a '''code

执行后得出: 4499205328 4499205328 1对象

单例模式有效!继承

将第一行的class x(object): 改成class x: , 执行结果为it

4467004840 4467004912 Noneclass

单例模式无效!object

原本觉得python相似于Java的模式,全部的类默认都是派生于object类,即object是’根类’。但事实上不是这样。深刻了解了一下才发现。继承于object的类,使用了new-style的对象,反之则使用默认的classic对象。这两种对象的明显区别是classic对象在实例化的时候不会调用__new__方法,而是直接调用__init__方法,因此用__new__方法实现的单例模式是没法在classic对象中实现的。方法

吐槽一句:object方法是python在2.2的时候增长的一个特性,自己就是为了解决这个__new__方法的问题,但在2.7尚未将默认继承调整为object,进度真的很慢。相比来讲3.x的进步又实在太快了。单例模式

相关文章
相关标签/搜索