【冷门的Python常识】1. “class 类名(object)“ 的写法为何存在?

问题:“class 类名(object)” 的写法为何存在?

简答:Python2与Python3的版本差别,python3中无需手动继承object。

一 详细说明

通俗来说,Python2中继承object的类称为新式类,不继承的为经典类,如class A(object)和class A;严格来说在Python 2及以前的版本中,由任意内置类型派生出的类(只要一个内置类型位于类树的某个位置),都属于“新式类”,都会获得所有“新式类”的特性;反之,即不由任意内置类型派生出的类,则称之为“经典类”。

“新式类”和“经典类”的区分在Python 3之后就已经不存在,在Python 3.x之后的版本,因为所有的类都派生自内置类型object(即使没有显示的继承object类型),即所有的类都是“新式类”。
官网说明:https://www.python.org/doc/newstyle/

二 进一步讨论

下面对Python2中的object特性来简单说明,在Python2中,object的存在对类结构有两个影响,一是继承,二是类函数。

1.继承

如果一个类是object的子类,则他是新式类,否则为经典类,新式类在匹配方法时,使用广度优先原则(最接近当前类的父类方法),而经典类使用深度优先原则(离当前类最遥远的父类方法),比如

# 1. 新式类: 最终匹配到的方法是类C中的方法
class A(object):
    def f(self):
        print 'A'

class B(A):
    pass

class C(A):
    def f(self):
        print 'C'

class D(B,C):
    pass

d = D()
d.f()	#C

# 2. 经典类: 最终匹配到的是最深的类A中的方法
class A:
    def f(self):
        print 'A'

class B(A):
    pass

class C(A):
    def f(self):
        print 'C'

class D(B,C):
    pass

d = D()
d.f()	#A

2. 类函数

Person类不继承object对象,只拥有了__doc__ , module 和 自己定义的name变量, 也就是说这个类的命名空间只有三个对象可以操作;Animal类继承了object对象,拥有了更多可操作对象,这些都是类中的高级特性。

class Person:
    """
    不带object
    """
    name = "person"
 
 
class Animal(object):
    """
    带有object
    """
    name = "animal"
 
if __name__ == "__main__":
    x = Person()
    print "Person", dir(x)
 
    y = Animal()
    print "Animal", dir(y)
Person ['__doc__', '__module__', 'name']
Animal ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', 
'__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', 
'__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name']

参考

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dongbo X

感谢!!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值