继承:类与类之间也是存在一种继承的关系
目录
子类选择性继承父类
重写与重载
多继承
super关键字
子类选择性继承父类
注意:子类只能继承父类公开的属性和方法,私有的属性和方法不能被继承
#父类:Father类 子类:Son类
class Father(object):
def __init__(self,name,age):
self.name = name #公有属性
self.__age = age #私有属性
def run(self): #公有方法
print("我会跑")
def __work(self): #私有方法
print("我要上班")
class Son(Father):
pass
u1 = Son("张一一","3")
print(u1.name)
u1.run()
>>>
张一一
我会跑
print(u1.__age)
u1.__work()
>>>
发生异常
重写与重载
python中有方法重写,但没有方法重载(重载:函数名称相同,但是参数的个数或类型不同)。但是可以通过装饰器实现方法重载
继承可以实现方法的重写(覆盖)
注意:重写方法的时候,方法的名称,参数一定要和父类一致
#在子类中重写父类的work方法
class Father(object):
def __init__(self,name,age):
self.name = name
self.__age = age
def work(self):
print("我要上班")
class Son(Father):
def work(self):
print("我要上学")
u1 = Son("张一一","3")
u1.work()
>>>
我要上学
多继承
python支持多继承,多继承按继承的顺序来找
#A类继承了B,C,object 三个类
class B(object):
def H(self):
print("这是B的方法")
class C(object):
def H(self):
print("这是C的方法")
class A(B,C,object): #继承顺序先B-C-object
pass
a = A()
a.H() #按继承顺序调用方法
>>>
这是B的方法
super关键字
是一个指针,默认指向的父类
class Father(object):
def __init__(self,name,age):
self.name = name
self.age = age
def work(self):
print("我要上班")
class Son(Father):
def work(self):
print("我要上学")
def test(self):
self.work()
super().work()
u1 = Son("张一一","3")
u1.test()
>>>
我要上学
我要上班
?
|