一、面向对象特征之二:继承
继承:实现代码的重用,相同的代码不需要重复的写,子类继承父类及父类的父类的属性和方法
基类:父类
派生类:子类
继承:分为单继承和多继承
1、单继承
class 类名(父类):
类主体
#单继承
class Anmail:
#属性
def __init__(self,name,age):
self.name=name
self.age=age
#方法
def eat(self):
print('父类方法:吃')
def sleep(self):
print('父类方法:睡')
def speak(self):
print('父类方法speak()')
def __private(self):
print('这是一个私有方法')
class Cat(Anmail):
pass
# 重写父类的方法
def speak(self):
# 调用父类的方法,并且还需要进行扩展
Anmail.speak(self)
#子类扩展
print('子类扩展')
class Dog(Anmail):
pass
miao1=Cat('jiafeimiao',5)
dog1=Dog('hh',2)
miao1.eat()
miao1.speak()
# jiafeimiao.__private()
# 判断某个实例是否是某个类的实例
print(isinstance(miao1,Cat))
print(isinstance(dog1,Cat))
# 判断参数1是否为参数2的子类
print(issubclass(Cat,Anmail))
2、多继承
class 类名(父类1,父类2,父类3):
类主体
注意:多继承,采用就近原则,从左到右
#多继承
class Anmail:
#属性
def __init__(self,name,age):
self.name=name
self.age=age
#方法
def eat(self):
print('父类方法:吃')
def sleep(self):
print('父类方法:睡')
def speak(self):16
print('父类方法speak()')
def __private(self):
print('这是一个私有方法')
class Cat:
pass
def speak(self):
print('喵喵。。。。')
class JiaFeiCat(Cat,Anmail):
pass
jiafeicat1=JiaFeiCat('jiafeicat1',2)
jiafeicat1.speak() # 先会调用Cat类中的speak方法,如果没有再去找下一个父类是否有此方法
注意:
1、子类调用方法,先找自己,然后再去找父类,再找父类的父类,依次类推
2、子类不能继承父类及父类的父类的私有属性及方法
3、能写父类方法
1、覆盖父类方法 子类中重写父类的方法
2、扩展父类方法
父类名.方法名(self) 调用父类的方法
二、面向对象第三大特征:多态
多态:不同的子类对象调用相同的方法,产生不同的执行结果(呈现出多态的形态)
class zfb:
'''支付宝支付'''
def zhifu(self):
print('支付宝支付')
class yl:
'''银联支付'''
def zhifu(self):
print('银联支付')
def pay(object):
object.zhifu()
# 支付宝支付
zfb=zfb()
pay(zfb)
yl=yl()
pay(yl)
作业
# 三、编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音。可以弹奏的乐器包括二胡、钢琴和琵琶。
# 实现思路及关键代码:
# 1)定义乐器类Instrument,包括makeSound()方法,此方法中乐器声音:"乐器发出美妙的声音!"
# 2)定义乐器类的子类:二胡Erhu、钢琴Piano和小提琴Violin
# 二胡Erhu声音:"二胡拉响人生"
# 钢琴Piano声音:"钢琴美妙无比"
# 小提琴Violin声音:"小提琴来啦"
# 3)用main类,多态的方式对不同乐器进行切换
class Instrument():
def makeSound(self):
print("乐器发出美妙的声音!")
class Erhu(Instrument):
def makeSound(self):
print("二胡拉响人生")
class Piano(Instrument):
def makeSound(self):
print("钢琴美妙无比")
class Violin(Instrument):
def makeSound(self):
print("小提琴来啦")
def yz(yueqi):
yueqi.makeSound()
if __name__ == "__main__":
erhu = Erhu()
piano = Piano()
violin = Violin()
pipa = Instrument()
yz(erhu)
yz(piano)
yz(violin)
yz(pipa)