面向對象的三大特征之一:多態性


一 多態:

多態指的是一類事物有多種形態。一般是抽象的形式,它們之間是繼承的關系。

import abc
class Animal(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def run(self):
        pass
    @abc.abstractmethod
    def eat(self):
        pass

class People(Animal):
    def run(self):
        print('People is walking')

    def eat(self):
        print('People is eating ')


class People(Animal):
    def run(self):
        print('People is walking')

    # def eat(self):
    #     print('People is eating ')


class Pig(Animal):
    def run(self):
        print('Pig is walking')

    def eat(self):
        print('Pig is eating ')

分析總結:從上面的代碼中可以看出,Animal有三種形態,分別是,人,狗,豬。而且也體現了都是繼承的關系‘豬是動物’。。。。

 

 多態性

(1)什么是多態性(注意:多態與多態性是兩種概念)

多態性是指具有不同功能的函數可以使用相同的函數名,這樣就可以用一個函數名調用不同內容的函數。在面向對象方法中一般是這樣表述多態性:向不同的對象發送同一條消息,不同的對象在接收時會產生不同的行為(即方法)。總而言之就是在不考慮對象的類型的情況下直接使用對象。

(1)增加了程序的靈活性
  以不變應萬變,不論對象千變萬化,使用者都是同一種形式去調用,如func(animal)
(2)增加了程序額可擴展性
  通過繼承animal類創建了一個新的類,使用者無需更改自己的代碼,還是用func(animal)去調用

 

class Cat(Animal):
    def run(self):
        print('say miaomiao')


def fun(obj):
    obj()

cat1=Cat()

Cat類是在上面的類型中新添加的,但同樣可以直接使用fun():

 

 

鴨子理論

python是一種多態語言,崇尚鴨子類型。

“鴨子測試”可以這樣表述:

“當看到一只鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那么這只鳥就可以被稱為鴨子。”

在鴨子類型中,關注的不是對象的類型本身,而是它是如何使用的。

class TDisk: 
    def read(self):
        print('Disk read')
 
class Text: 
    def read(self):
        print('Text read')

disk1=Disk()
text1=Text()
text.read()
disk.read()

兩個類型不一樣,但它們都有相似的方法。

 

序列類型:列表list,元組tuple, 字符串str

l=list([1,2,3])

t=tuple(('q','b'))

s=str('hello')

print(l.__len__())

print(t.__len__())

print(s.__len__())

只要是序列類型都可以使用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM