關於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的進步又實在太快了。單例模式

相關文章
相關標籤/搜索