python中OOP的继承和组合
qingheluo2018-11-20清河洛331
继承在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。继承的好处是子类获得了父类的全部功能,其次是多态。当子类和父类都存在相同的方法时,子类方法会覆盖父类的方法,在代码运行的时候,总是会调用子类的方法。这样,我们就获得了继承的另一个好处:多态。调用未绑定的父类方法和super()函数class FClass:
def __init__(self):
self.name=‘MyName‘
class ...
继承
在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。
继承的好处是子类获得了父类的全部功能,其次是多态。
当子类和父类都存在相同的方法时,子类方法会覆盖父类的方法,在代码运行的时候,总是会调用子类的方法。这样,我们就获得了继承的另一个好处:多态。
调用未绑定的父类方法和super()函数
class FClass: def __init__(self): self.name=‘MyName‘ class SClass(FClass): def __init__(self): self.age=28
上例中其实子类仅仅是想新增一个age属性,name属性仍然是需要的,但是这种做法子类的实例中是没有name属性的,有三个办法可以解决这个问题
1.完全重定义__init__方法,在子类中把父类中的定义再重新写一遍,这种做法很麻烦,不推荐
2.调用未绑定的父类方法,在子类的__init__方法语句第一行增加FatherClassName.__init__(self):
class SClass(FClass): def __init__(self): FClass.__init__(self) self.age=28
这个方法如果代码改动如父类改名,则所有子类都要修改父类的名字,很繁琐
3.使用super()函数
class SClass(FClass): def __init__(self): super().__init__() #使用super()不需要传入self参数 self.age=28
这个方法无论后期父类如何改动,子类都不需要改动任何代码即可执行,推荐此方法
组合
组合是把一些没有继承关系的类放到一起,把类的实例化放到了新类里面,新类就组合了旧类,这样不会产生继承中的覆盖等问题。
class def Yuwen: def __init__(self , x): self.fen = x class def Shuxue: def __init__(self , x): self.fen = x class Chengji: def __init__(self , x ,y): self.yuwen = Yuwen(x) self.shuxue = Shuxue(y) def print_chengji(self): print("语文分数是 %d ,数学分数是 %d" % (self.yuwen.fen , self.shuxue.fen))