python通过子类继承超类来定制子类的行为。
1.1 重写类方法
(1)如果子类和超类有同名方法,根据搜索树规则,优先调用子类方法。
(2)子类重写超类方法:在子类定义和父类已有的同名的方法。
(3)一般是对父类方法的加强,即存在父类方法的处理逻辑。
1.2 父类名.方法名
用法
class SupClass:
def methodA(self):pass
class SubClass(SupClass):
def methodA(self):
SupClass.methodA(self)
pass
描述
在子类,通过“父类名.方法名”调用父类同名方法,达到简化代码的效果。
SupClass.methodA(self):
(1)通过“类名.方法名”调用方法时,需要送一个实例给方法。
(2)self为当前调用方法的实例,故需显式将self送给父类方法。
1.3 多态
python子类如果重写超类的方法,那么根据搜索树规则:
超类实例对象,会调用超类的同名方法;
子类实例对象,会调用子类的同名方法;
即,会根据当前调用实例,自动调用对应的方法。
条件:
(1) 继承:多态发生在子类和超类之间
(2) 重写:子类重写父类方法。
1.4 示例
class Tool:
def payraise(self,p,*args):
p.payraise(*args)
class MyPerson:
def __init__(self,name,job = None,pay = 0):
self.name = name
self.job = job
self.pay = pay
def payraise(self,rate):
self.pay = int(self.pay * (1 + rate))
def __str__(self):
return 'MyPerson:name={0.name},job={0.job},pay={0.pay}'.format(self)
class MyManager(MyPerson):# 继承
# 重写
def payraise(self,rate,bonus=0.1):
MyPerson.payraise(self,rate+bonus)
if __name__ == '__main__':
mp1 = MyPerson('mp1')
mp2 = MyPerson('mp2','c++开发',20000)
mm1 = MyManager('mm1','开发经理',50000)
print(mp1)
print(mp2)
print(mm1)
mp2.payraise(0.1)
mm1.payraise(0.1)
print(mp2)
print(mm1)
print('#'*10+'多态'+'#'*10)
for p in (mp1,mp2,mm1):
p.payraise(0.1)
print(p)
t = Tool()
print('#'*10+'多态'+'#'*10)
for p in (mp1,mp2,mm1):
t.payraise(p,0.1)
print(p)
# 打开cmd,执行下面示例
E:\\documents\\F盘>python myperson.py
MyPerson:name=mp1,job=None,pay=0
MyPerson:name=mp2,job=c++开发,pay=20000
MyPerson:name=mm1,job=开发经理,pay=50000
MyPerson:name=mp2,job=c++开发,pay=22000
MyPerson:name=mm1,job=开发经理,pay=60000
##########多态##########
MyPerson:name=mp1,job=None,pay=0
MyPerson:name=mp2,job=c++开发,pay=24200
MyPerson:name=mm1,job=开发经理,pay=72000
##########多态##########
MyPerson:name=mp1,job=None,pay=0
MyPerson:name=mp2,job=c++开发,pay=26620
MyPerson:name=mm1,job=开发经理,pay=86400
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
编程语言
+关注
关注
10文章
1945浏览量
34737 -
python
+关注
关注
56文章
4797浏览量
84689
发布评论请先 登录
相关推荐
请教:子类数据流使用父类后数据类型就变成父类了而不是子类
本帖最后由 wyq95361977 于 2016-6-29 19:50 编辑
在练习系类时碰到一个问题例子中使用信号灯再使用定时器,类的关系还是不变都是子类但是我在练习时类数据流
发表于 06-29 19:40
建立父类即其子类的同名方法——关于重写VI的问题
随着项目的进行,发现类的重要性,最近学习时遇到了一些问题:按照《宝典》的介绍(P353),创建了一个运算类作为父类,又创建了一个加法
发表于 09-23 17:07
3分钟看懂Python面向对象
的直接感觉是这是一种复用代码的行为。继承可以理解为它是以普通的类为基础建立专门的类对象,子类和它继承的父类是IS-A的关系。多重继承:不同于
发表于 06-08 14:20
python类的多态和类的property属性
python类的多态多态,是指在同一类型下的不同形态。比如下面这段代码class People: def speak(self):passc
发表于 03-09 16:38
详解IO设备管理之父类调用子类方法的过程
,对象创建和初始化流程结束。——这个注册过程映射到面向对象中,是继承父类方法后子类改写父类方法的过程。2.2.2 再看对象使用从上往下
发表于 10-09 15:18
python类的多态和类的property属性
python类的多态 多态,是指在同一类型下的不同形态。 比如下面这段代码 class People: def speak(self): p
super调用父类的构造方法
我们分析这句话“父类对象的引用”,那说明我们使用的时候只能在子类中使用,既然是对象的引用,那么我们也可以用来调用成员属性以及成员方法,当然了,这里的 super 关键字还能够
java子类可以继承父类的什么
Java是一种面向对象的编程语言,它支持继承的概念。继承是面向对象编程的三大特性之一,它允许一个类(称为子类或派生类)继承另一个类(称为父
评论