1. 程式人生 > >Python3 從零單排19_組合&多型

Python3 從零單排19_組合&多型

  組合 :物件1的屬性是物件2,物件1就擁有了物件2的資料和函式屬性,這就是組合。
# A型別和B型別沒有共性,不可以繼承,但是A有B的特性,比如A是人,B是家,A和B沒有繼承關係,但是人有家,A有B的關係,那麼就可以把B的屬性都給A用
class people:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def say_hi(self):
        print("hi my name is %s"%self.name)


class home:
    
def __init__(self,adress,area,height): self.adress = adress self.area = area self.heaight = height def home_info(self): print("地址:%s,面積:%s"%(self.adress,self.area)) xg = people("曉鋼",18) hourse = home("地球",1000,10) xg.hourse = hourse xg.hourse.home_info() #地址:地球,面積:1000

  抽象類:抽取一些類的共性作為一個類,比如水果類,人類。抽象類能被繼承,但是不能被例項化。
  當函式屬性用裝飾器abc.abstractmethod裝飾的時候,子類必須按照抽象類的定義實現這個固定的函式屬性,否則報錯。
import abc #需要用到abc這個模組來定義抽象類


class animal(metaclass=abc.ABCMeta):
    @abc.abstractmethod  #abc.abstractmethod 裝飾後,該類的所有子類必須含有該方法才不會報錯
    def run(self):
        print("people is running!
") def sleep(self): pass class people(animal): def run(self): #必須定義run方法才可以,否則報錯 pass

  

多型:同一類事物的多種形態
import abc


class Animal(metaclass=abc.ABCMeta): #同一類事物:動物
    @abc.abstractmethod  
    def talk(self): # animal的所有子類都必須實現talk方法,否則報錯
        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')

class Cat(Animal): #動物的形態之三:貓
    def talk(self):
        print('say miamiao')

#多型性:指的是可以在不考慮物件的型別的情況下而直接使用物件方法  從而擴充套件性高
peo1=People()
dog1=Dog()
pig1=Pig()
cat1=Cat()

# peo1.talk()
# dog1.talk()
# pig1.talk()

def func(animal):
    animal.talk()
    
func(peo1)
func(pig1)
func(dog1)
func(cat1)

 

鴨子型別  不同類定義的函式或者資料屬性名字相同,不同物件在呼叫這些屬性時,看上去都是一樣的屬性,實現功能也一樣,但內部程式碼邏輯並不一樣。
class Disk:
    def read(self):
        print('disk read')

    def write(self):
        print('disk write')


class Text:
    def read(self):
        print('text read')

    def write(self):
        print('text write')

# f=open(...)
# f.read()
# f.write()

disk=Disk()
text=Text()

disk.read()
disk.write()

text.read()
text.write()

  

序列型別是典型的鴨子型別:列表list,元祖tuple,字串str
l=list([1,2,3])
t=tuple(('a','b'))
s=str('hello')
#
# # print(l.__len__())
# # print(t.__len__())
# # print(s.__len__())
#
# # def len(obj):
# #     return obj.__len__()

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