1.1 隐式的基类—object
每个Python类的定义都会隐式继承object
类的定义如下:
class x:
pass
打开Python自带的IDE,试验一下
>>> class x:
pass
>>> x.__class__
<class 'type'>
>>> x.__class__.__base__
<class 'object'>
代码解释: 首先定义一个名为x的类,然后查看x的类型,它是type类,最后是查看x的超类(即父类)
- 知识延伸
__class__和type()的效果是一样的,都用来查看类型的
__base__表示当前类的超类,而__bases__表示当前类的所有超类
- 思维延伸–type和object的关系
在Python的世界中,object是父子关系的顶端,所有的数据类型的父类都是它;type是类型实例关系的顶端,所有对象都是它的实例的。
例如:
object是一个type,object is and instance of type。即Object是type的一个实例。
>>> object.__class__ # object的类型
<class 'type'>
>>> object.__bases__ # object的超类,显然它是没有超类的,因为它是继承关系的顶端
()
type是一种object, type is kind of object。即Type是object的子类。
>>> type.__class__ # type的类型
<class 'type'>
>>> type.__bases__ # type的超类,它继承于object类
(<class 'object'>,)
python有一副类型关系图,如下:
强烈推荐观看:type和object的区别
基类中的__init__()方法
对象的生命周期主要包括创建、初始化和销毁.
object作为所有类的基类,已经为__init__()方法提供了默认实现.
对于继承object的子类,总可以对它的属性进行扩展.
>>> class Rectangle: # 默认继承object类
def area(self):
return self.length*self.width # 定义属性
>>> r = Rectangle() # 示例化矩形
>>> r.length, r.width = 13, 8 # 初始化矩形实例的属性
>>> r.area() # 计算面积
104
虽然上述延迟赋值在python合法,但是强烈不推荐这样写.正确做法是将属性写在类的__init__()