python类的继承
子类不重写 init,实例化子类时,会自动调用父类定义的 init。一. 子类继承父类的构造函数
#-*-coding:utf-8-*-class Father(object): def __init__(self, first_name,last_name): self.first_name = first_name self.last_name = last_name print ( "name: %s%s" %( self.first_name,self.last_name) ) def getName(self): return 'Father ' + self.nameclass Son(Father): def getName(self): return 'Son '+self.first_nameif __name__=='__main__': son = Son('li','si') print ( son.getName() )
输出结果为:name: lisiSon li
2 . 重写init ,实例化子类,就不会调用父类已经定义的 init
#-*-coding:utf-8-*-class Father(object): def __init__(self, first_name,last_name): self.first_name = first_name self.last_name = last_name print ( "name: %s%s" %( self.first_name,self.last_name) ) def getName(self): return 'Father ' + self.nameclass Son(Father): def __init__(self, first_name, last_name): self.first_name = first_name self.last_name = last_name print("name: %s" %( self.last_name)) def getName(self): return 'Son '+self.last_nameif __name__=='__main__': son = Son('li','si') print ( son.getName() )
3 . 重写了init ,要继承父类的构造方法,可以使用 super 关键字:
`super(子类,self).__init__(参数1,参数2,....)`
#-*-coding:utf-8-*-class Father(object): def __init__(self, first_name,last_name): self.first_name = first_name self.last_name = last_name print ( "name: %s%s" %( self.first_name,self.last_name) ) def getName(self): return 'Father ' + self.nameclass Son(Father): def __init__(self, first_name, last_name): super(Son,self).__init__(first_name,last_name) self.last_name = last_name print("name: %s" %( self.last_name)) def getName(self): return 'Son '+self.last_nameif __name__=='__main__': fa = Father('li','san') son = Son('li','si') print ( son.getName() )输出结果为:name: lisanname: lisiname: siSon si
二. 普通类方法的继承
class Animal(): def __init__(self, kind, age): self.kind = kind self.age = age print("这是父类的__init__方法") def info(self): print('这是一只' + self.kind, ',今年' + self.age + '岁了')class Cat(Animal): pass # 不想向类中添加任何其他的属性或者方法,可以使用关键字passanimal = Animal('狗', '5')animal.info()cat = Cat('猫','3')cat.info()输出结果:这是父类的__init__方法这是一只狗 ,今年5岁了这是父类的__init__方法这是一只猫 ,今年3岁了
这里Animal为父类,Cat为子类,子类继承了父类的特性,因此Cat也拥有info方法。
子类除了可以继承父类的方法,还可以覆盖父类的方法:
class Animal(): def __init__(self, kind, age): self.kind = kind self.age = age print("这是父类的__init__方法") def info(self): print('这是一只' + self.kind, ',今年' + self.age + '岁了')class Cat(Animal): def __init__(self, kind, age,name): super().__init__(kind, age) print("这是子类的__init__方法") self.name = name def info(self): print('这是一只' + self.kind, ',今年' + self.age + '岁了','它的名字是'+self.name)animal = Animal('狗', '5')animal.info()cat = Cat('猫','3','kitty')cat.info()
这里子类Cat里的info 覆盖了父类的info。
子类可以在继承父类方法的同时,对方法进行重构。这样一来,子类的方法既包含父类方法的特性,同时也包含子类自己的特性:
class Animal(): def __init__(self, kind, age): self.kind = kind self.age = age print("这是父类的__init__方法") def info(self): print('这是一只' + self.kind, ',今年' + self.age + '岁了')class Cat(Animal): def __init__(self, kind, age,name): super().__init__(kind, age) print("这是子类的__init__方法") self.name = name def info(self): super().info() print('它的名字是'+self.name)animal = Animal('狗', '5')animal.info()cat = Cat('猫','3','kitty')cat.info()
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。