類的抽象類介面類,多型封裝

2022-07-24 03:06:10 字數 2586 閱讀 1751

抽象類,介面類

from abc import abcmeta,abstractmethod

class payment(metaclass=abcmeta): # 抽象類(介面類):

@abstractmethod

def pay(self): pass # 制定了乙個規範,子類中沒有制定的這個方法就報錯

class alipay(payment):

def __init__(self,money):

self.money = money

def pay(self):

print('使用支付寶支付了%s' %self.money)

class jdpay(payment):

def __init__(self, money):

self.money = money

def pay(self):

print('使用京東支付了%s' % self.money)

class wechatpay(payment):

def __init__(self,money):

self.money = money

def pay(self):

def pay(obj):

obj.pay()

w1 = wechatpay(200)

a1 = alipay(200)

j1 = jdpay(100)

pay(a1) # 歸一化設計

pay(j1)

python 到處都是多型

python有鴨子型別.

鴨子型別 : 看著像鴨子,他就是鴨子.

這些類 都互稱為鴨子.

#舉例:字串,列表,元組中都有index方法,這幾個類就叫做鴨子型別.方法用一樣的名字

class str:

def index(self):

pass

class list:

def index(self):

pass

class tuple:

def index(self):

pass

廣義的封裝: 例項化乙個物件,給物件空間封裝一些屬性.

狹義的封裝: 私有制.私有成員:私有靜態屬性,私有方法,私有動態屬性

class b:

__money = 100000

class a(b):

name = 'alex'

__age = 1000

def func(self):

print(self.__age)

print(a.__age) # 對於私有靜態屬性,類的內部可以訪問.

print('func....')

def func1(self):

print(self.__money)

print(a.__money)

a1 = a()

print(a1.name)

print(a.name)

print(a1.__age) # 例項化物件不能訪問私有靜態屬性

print(a.__age) # 類名不能訪問私有靜態屬性

對於私有靜態屬性,類的外部不能訪問.

a1.func()

對於私有靜態屬性,類的內部可以訪問.

a1.func1()

對於私有靜態屬性來說,只能在本類中內部訪問,類的外部,派生類均不可訪問.

可以訪問,但是工作中千萬不要用.

print(a._a__age)

print(a.__dict__)

私有方法

class b:

__money = 100000

def __f1(self):

print('b')

class a(b):

name = 'alex'

def __func(self):

print('func....')

def func1(self):

self.__func() # 類的內部可以訪問

self.__f1()

a1 = a()

a1.__func() # 類外部不能訪問

a1.func1() # 類的內部可以訪問

# 面試題

class parent:

def __func(self):

print('in parent func')

def __init__(self):

self.__func()

class son(parent):

def __func(self):

print('in son func')

son1 = son()

#例項化物件的時候先執行等號右邊,然後自動執行類裡面的__init__方法,

子類中沒有去父類中找,

然後執行__func方法,

因為私有靜態屬性以及方法往下走時前面自動加上_類名,因為__init__方法在parent類中,

所以等於執行_parent__func方法,

列印inparent func

多型 抽象類 介面

抽象類介面 什麼是多型?同乙個物件,在不同時刻表現出來的不同形態 1.有繼承 實現的前提 2.有方法的重寫 3.有父類引用指向子類物件 例 animal a new cat 成員變數訪問 父類中有的屬性,才能正常編譯 編譯看左邊 如子類也有相同屬性,訪問執行出來的是父類中的屬性值 成員方法訪問 父類...

多型 抽象類 介面

同一物件,在不同時刻表現出來的不同形態 多型的前提和實現 有繼承 實現關係 有方法重寫 有父類引用指向子類物件 多型中成員訪問特點 成員變數 編譯看左邊,執行看左邊 成員方法 便宜看左邊,執行看右邊 為什麼成員方法和成員變數的訪問不一樣呢?因為成員方法有重寫,而成員變數沒有 多型的好處和弊端 好處 ...

多型 抽象類 介面

1.多型的使用方式 父類引用指向子類物件 同一型別的物件引用指向了不同型別的子類物件,具體方法的實現不同 呼叫的方法需要是子類和父類都有的,但是執行的是子類的,就是執行醫生類覆蓋的 重寫的 eat方法 也就是所謂的 編譯看左邊,執行看右邊!能夠呼叫什麼方法,取決於引用的型別,而方法中具體怎麼執行,要...