标签:python 动物类 抽象 elf abs div read port txt
多态也称“多态性”,指的是同一种类型的事物,不同的形态。
在python中的多态指的是让多种类若具备类似的数据属性与方法属性,都统一好命名规范,这样可以提高开发者的代码统一性,使得调用者更方便去理解。
为了在不知道对象具体类型的情况下,统一对象调用方法的规范(名字)
父类: 定制一套统一的规范。(比如: 方法名统一)
子类: 遵循父类的统一的规范。(比如: 子类遵循父类方法名的统一)
多态的三种表现形式:
#动物类 class Animal: #方法:吃 def eat(self): pass #方法:叫 def speak(self): pass #猪类 class Pig(Animal): def eat(self): print(‘bia唧‘) def speak(self): print(‘哼哼哼‘) #猫类 class Cat(Animal): def eat(self): print(‘咬...‘) def speak(self): print(‘喵喵喵‘) #狗类 class Dog(Animal): def eat(self): print(‘叫...‘) def speak(self): print(‘汪汪汪‘) pig1 = Pig() cat1 = Cat() dog1 = Dog() # 设置一个接口 def SPEAK(obj): obj.speak() SPEAK(pig1) #pig1.speak() SPEAK(cat1) #cat1.speak() SPEAK(dog1) #dog1.speak()
1.增加了程序的灵活性
以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(animal)
2.增加了程序的可扩展性
通过继承animal类创建了一个新的类,使用者无需更改自己的代码,还是用func(animal)去调用
class People(Animal): #属于动物的另外一种形态:人 def speak(self): print(‘say hi‘) def func(people): #对于使用者来说,自己的代码根本无需改动 people.speak() people1=People() #实例出一个人 func(people1) #甚至连调用方式也无需改变,就能调用人的talk功能 ‘‘‘ 这样我们新增了一个形态People,由People类产生的实例people1,使用者可以在完全不需要修改自己代码的情况下, 使用和猫、狗、猪一样的方式调用people1的speak方法,即func(people1) ‘‘‘
在python内置的abc模块中,有一个抽象类,让子类必须遵循父类的编写规范。
注意:
import abc #动物类 class Animal(metaclass = abc.ABCMeta): #方法:吃 @abc.abstractmethod def eat(self): pass #方法:叫 @abc.abstractmethod def speak(self): pass #猪类 class Pig(Animal): def eat(self): print(‘bia唧‘) def speak(self): print(‘哼哼哼‘) pig1 = Pig() pig1.eat()
python崇尚鸭子类型,不同的对象,只要长得像鸭子,动作行为像鸭子,那它就是鸭子。
鸭子类型是多态的一种表现形式。
不同对象,先抽象出相同类型的方法,给他们定制一套统一的规范。所有的类,在定义时都按照统一的规范进行编写。
#二者都像鸭子,二者看起来都像文件,因而就可以当文件一样去用 class TxtFile: def read(self): pass def write(self): pass class DiskFile: def read(self): pass def write(self): pass
序列类型:list,str,tuple l = lisst([1,2,3]) s = str(‘hello‘) t = tuple((1,2,‘a‘)) #我们可以在不考虑三者类型的前提下使用s,l,t l.__len__() s.__len__() t.__len__()
str1 = ‘bh‘ list1 = [1,2,3] # print(str1.__len__()) # print(list1.__len__()) # 自定义统计长度函数 def LEN(obj): return obj.__len__() print(LEN(str1)) print(LEN(list1))
标签:python 动物类 抽象 elf abs div read port txt
原文地址:https://www.cnblogs.com/wddxx/p/13670447.html