python 类继承object_关于Python的Object继承

今天在Coding的使用,使用了python的单例模式,发现了一个很有趣的问题。

class x(object):

__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

执行后得出:

4499205328

4499205328

1

单例模式有效!

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

4467004840

4467004912

None

单例模式无效!

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

吐槽一句:object方法是python在2.2的时候增加的一个特性,本身就是为了解决这个__new__方法的问题,但在2.7还没有将默认继承调整为object,进度真的很慢。相比来说3.x的进步又实在太快了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值