1. 程式人生 > 其它 >多型與多型性

多型與多型性

多型

  多型指的是一類事物有很多種形態

  比如:檔案有很多種形態

import abc
class File(metaclass=abc.ABCMeta): #同一類事物:檔案
    @abc.abstractmethod
    def click(self):
        pass

class Text(File): #檔案的形態之一:文字檔案
    def click(self):
        print('open file')

class ExeFile(File): #檔案的形態之二:可執行檔案
    def click(self):
        print
('execute file')

多型性

  1、概念

    多型性是指在不考慮例項型別的情況下使用例項

  2、分類

    多型性分為靜態多型性和動態多型性

  3、靜態多型性

    如任何型別都可以用運算子+進行運算

  4、動態多型性

import abc
class Animal(metaclass=abc.ABCMeta): #同一類事物:動物
    @abc.abstractmethod
    def talk(self):
        pass

class People(Animal): #動物的形態之一:人
    def talk(self):
        
print('say hello') class Dog(Animal): #動物的形態之二:狗 def talk(self): print('say wangwang') class Pig(Animal): #動物的形態之三:豬 def talk(self): print('say aoao')
peo=People()
dog=Dog()
pig=Pig()

#peo、dog、pig都是動物,只要是動物肯定有talk方法
#於是我們可以不用考慮它們三者的具體是什麼型別,而直接使用
peo.talk()
dog.talk()
pig.talk()

#更進一步,我們可以定義一個統一的介面來使用 def func(obj): obj.talk()

  5、多型性的好處

    1、增加程式的靈活性

    2、增加程式的可擴充套件性

  6、多型練習

class Pig():
    def speak(self):
        print('哼哼哼')


class Dog():
    def speak(self):
        print('汪汪汪')

class Txt():
    def speak(self):
        print('Txt')

obj = People()
obj1 = Pig()
obj2 = Dog()
obj3 = Txt()

# 多型帶來的特性:在不用考慮物件資料型別的情況下,直接呼叫對應的函式

def animal(animal):
    return animal.speak()

animal(obj)
animal(obj1)
animal(obj2)
animal(obj3)

# 父類限制子類的行為
class Animal():
    def speak(self):
        raise Exception("必須實現speak方法")

  7、其實大家一直在享受著多型性帶來的好處,比如Python的序列型別有多種形態:字串,列表,元組,多型性體現如下

#str,list,tuple都是序列型別
s=str('hello')
l=list([1,2,3])
t=tuple((4,5,6))

#我們可以在不考慮三者型別的前提下使用s,l,t
s.__len__()
l.__len__()
t.__len__()

len(s)
len(l)
len(t)

抽象類

  抽象類只能被繼承,不能被例項化

class Animal(metaclass=abc.ABCMeta):

    @abc.abstractmethod  # 該方法已經是抽象方法了
    def speak(self): pass

    @abc.abstractmethod
    def login(self):pass

class People(Animal):
    def speak(self):
        # print('嗷嗷嗷')
        pass
    def login(self):
        pass


class Pig(Animal):
    def speak(self):
        print('哼哼哼')
    

class Dog(Animal):
    def speak(self):
        print('汪汪汪')


obj = People()
obj.speak()