赞
赏
在 Python 中,类可以分为新式类和经典类,新式类就是 继承 object 类的 类,经典类就是没有继承 object 类的类,在 Python2.x 版本中,所有的类默认都没有继承 object 类,在 Python3.X 版本中,不管我们有没有显式指定,所有的类都继承 object 类。
旧式类的实现不够好,类是类,实例是实例,类的类型是 classobj,实例的类型是 instance,两者的联系只在于 class。 这和内置对象是不同的,int 对象的类型就是 int,同时 int() 返回的也是 int 类型的对象,内置对象和自定义对象不同就对代码统一实现带来很大困难。
而新式类,所有类的类型都是 type,所有类调用的结果都是 构造,返回这个类的实例,所有类都是 object 的子类,新式类不仅可以用旧类调用父类的方法,也可以用 super 方法。
python 2.x | python 2.x | python 3.x | python 3.x |
---|---|---|---|
不含object | 含object | 不含object | 含object |
__doc__ |
__doc__ |
__doc__ |
__doc__ |
__module__ |
__module__ |
__module__ |
__module__ |
__class__ |
__class__ |
__class__ |
|
__delattr__ |
__delattr__ |
__delattr__ |
|
__dict__ |
__dict__ |
__dict__ |
|
__format__ |
__format__ |
__format__ |
|
__getattribute__ |
__getattribute__ |
__getattribute__ |
|
__hash__ |
__hash__ |
__hash__ |
|
__init__ |
__init__ |
__init__ |
|
__new__ |
__new__ |
__new__ |
|
__reduce__ |
__reduce__ |
__reduce__ |
|
__reduce_ex__ |
__reduce_ex__ |
__reduce_ex__ |
|
__repr__ |
__repr__ |
__repr__ |
|
__setattr__ |
__setattr__ |
__setattr__ |
|
__sizeof__ |
__sizeof__ |
__sizeof__ |
|
__str__ |
__str__ |
__str__ |
|
__subclasshook__ |
__subclasshook__ |
__subclasshook__ |
|
__weakref__ |
__weakref__ |
__weakref__ |
|
__dir__ |
__dir__ |
||
__eq__ |
__eq__ |
||
__ge__ |
__ge__ |
||
__gt__ |
__gt__ |
||
__le__ |
__le__ |
||
__lt__ |
__lt__ |
||
__ne__ |
__ne__ |
继承 object 类的为新式类
print("嗨客网(www.haicoder.net)")
class Person:
name = "HaiCoder"
class Student(object):
name = "HaiCoder"
person = Person()
print(dir(person))
student = Student()
print(dir(student))
程序运行后,控制台输出如下:
我们创建了一个 Person 类,该类没有显式指定继承 object 类,同时,创建了一个 Student 类,该类我们显式指定了继承 object 类。
最后,我们分别实例化了一个 Person 类和一个 Student 类,我们再使用 dir 打印出这两个类实例的属性列表,结果,发现它们的属性列表一模一样,因为,我们这里使用的是 Python3 版本,因此不需要显式指定继承 object。
在 Python 中,类可以分为新式类和经典类,新式类就是继承 object 类的类,经典类就是没有继承 object 类的类,在 Python2.x 版本中,所有的类默认都没有继承 object 类,在 Python3.X 版本中,不管我们有没有显式指定,所有的类都继承 object 类。