多态
1、什么是多态
多态指的就是同一种事物多种形态
2、为什么要用多态
用基类创建一套统一的规则,强制子类去遵循(使用抽象类实现),这样便可以在不用考虑
对象具体类型的前提下而直接使用对象下的方法
3、如何用多态
class animal: def eat(self): pass def drink(self): pass def run(self): pass def bark(self): pass class dog(animal): def speak(self): print('汪汪汪') class cat(animal): def jiao(self): print('喵喵喵') class pig(animal): def han(self): print('哼哼哼‘) 多态性:可以在不用考虑对象具体类型的前提下而直接使用对象下的方法 c.eat() d.eat() p.eat() c.drink() d.drink() p.drink() # d.bark() p.bark() c.bark() d.speak() c.jiao() p.han()
我们发现我们在调用的时候与父类中属性不同,所以导致不能用到父类中属性。
所以,我们要固定调用方法
import abc #abstract class class Animal(metaclass=abc.ABCMeta): @abc.abstractmethod def eat(self): pass @abc.abstractmethod def drink(self): pass @abc.abstractmethod def run(self): pass @abc.abstractmethod def bark(self): pass # obj=Animal() # 抽象基类本身不能被实例化 class Cat(Animal): def eat(self): print('cat eat') def drink(self): print('cat drink') def run(self): print('cat run') def bark(self): print('喵喵喵') class Dog(Animal): def eat(self): print('dog eat') def drink(self): print('dog drink') def run(self): print('dog run') def bark(self): print('汪汪汪') class Pig(Animal): def eat(self): print('pig eat') def drink(self): print('pig drink') def run(self): print('pig run') def bark(self): print('哼哼哼') c=Cat() d=Dog() p=Pig() # c.bark() # d.bark() # p.bark() # def BARK(animal): # animal.bark() # # # BARK(c) # BARK(d) # BARK(p) s='hello' l=[1,2,3] t=(4,5,6) s.__len__() l.__len__() t.__len__() # def LEN(obj): # return obj.__len__() # # print(LEN(s)) # print(LEN(l)) # print(LEN(t)) print(len(l)) print(len(s)) print(len(t))
鸭子类型(了解一下)
class Foo: def f1(self): print('from foo.f1') def f2(self): print('from foo.f2') class Bar: def f1(self): print('from bar.f1') def f2(self): print('from bar.f2') obj1=Foo() obj2=Bar() obj1.f1() obj1.f2() obj2.f1() obj2.f2() class Disk: def read(self): print('disk read') def write(self): print('disk write') class Txt: def read(self): print('txt read') def write(self): print('txt write') class Process: def read(self): print('process read') def write(self): print('process write') obj1=Disk() obj2=Txt() obj3=Process() obj1.read() obj2.read() obj3.read()