基类与派生类
定义类的时候派生类定义的语法如下所示:
class DerivedClassName(BaseClassName):
- 名称 BaseClassName 必须定义于包含派生类定义的作用域中。
- 派生类定义的执行过程与基类相同。
- 当构造类对象时,基类会被记住。
- 如果请求的属性在类中找不到,搜索将转往基类中进行查找。
- 如果基类本身也派生自其他某个类,则此规则将被递归地应用。
继承的一般表现形式:
class 父类:
pass
class 子类(父类):
pass
两个内置函数
Python有两个内置函数可被用于继承机制:
- 使用 isinstance() 来检查一个实例的类型: isinstance(obj, int) 仅会在 obj.class 为 int 或某个派生自 int 的类时为 True。
- 使用 issubclass() 来检查类的继承关系: issubclass(bool, int) 为 True,因为 bool 是 int 的子类。 但是,issubclass(float, int) 为 False,因为 float 不是 int 的子类。
派生
1.在父类的基础上产生子类,产生的子类就叫做派生类
2.父类里没有的方法,在子类中有了,这样的方法就叫做派生方法。
3.父类里有,子类也有的方法,就叫做方法的重写(就是把父类里的方法重写了)
注意:
- 子类可以使用父类的所有属性和方法
- 如果子类有自己的方法,就执行自己的;如果子类没有自己的方法,就会找父类的。
- 如果子类里面没有找到,父类里也没有找到,将会报错
- 子类中实现了调用父类的方法
在类内:super(子类,self).方法名() supper().init(参数)
在类外:super(子类名,对象名).方法名()
表现形式:
super(子类, self).父类中的方法(…)
父类名.父类中的方法(self,…)
练习
class Provincial:
def level_p(self):
print("这是省级")
class city:
def level_c(self):
print("这是市级")
class district(city): #继承了city
def level_d(self):
print("这是区级")
obj=district()
obj.level_d()
obj.level_c()
# obj.level_p() #AttributeError: 'district' object has no attribute 'level_p'因无继承,找不到方法而报错
city.level_c("self")
super(district,obj).level_c()