嗨客网搜索

Python object类

Python object类教程

Python 中,类可以分为新式类和经典类,新式类就是 继承 object 类的 ,经典类就是没有继承 object 类的类,在 Python2.x 版本中,所有的类默认都没有继承 object 类,在 Python3.X 版本中,不管我们有没有显式指定,所有的类都继承 object 类。

Python新式类与旧式类区别

旧式类的实现不够好,类是类,实例是实例,类的类型是 classobj,实例的类型是 instance,两者的联系只在于 class。 这和内置对象是不同的,int 对象的类型就是 int,同时 int() 返回的也是 int 类型的对象,内置对象和自定义对象不同就对代码统一实现带来很大困难。

而新式类,所有类的类型都是 type,所有类调用的结果都是 构造,返回这个类的实例,所有类都是 object 的子类,新式类不仅可以用旧类调用父类的方法,也可以用 super 方法。

Python新式类与旧式类属性区别

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))

程序运行后,控制台输出如下:

112_python object类.png

我们创建了一个 Person 类,该类没有显式指定继承 object 类,同时,创建了一个 Student 类,该类我们显式指定了继承 object 类。

最后,我们分别实例化了一个 Person 类和一个 Student 类,我们再使用 dir 打印出这两个类实例的属性列表,结果,发现它们的属性列表一模一样,因为,我们这里使用的是 Python3 版本,因此不需要显式指定继承 object。

Python object类总结

在 Python 中,类可以分为新式类和经典类,新式类就是继承 object 类的类,经典类就是没有继承 object 类的类,在 Python2.x 版本中,所有的类默认都没有继承 object 类,在 Python3.X 版本中,不管我们有没有显式指定,所有的类都继承 object 类。

嗨客网顶部