19 抽象類 接口類 封裝. 多態
阿新 • • 發佈:2018-07-26
函數 執行 pyhon 傳參 自動 func def 外部 __init__
主要內容:
1. 抽象類(接口類):
制定一個規範 :
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): print(‘使用微信支付%s‘ % self.money) def pay(obj): #歸一化設計. obj.pay() a = Alipay(200) j = Jdpay(500) w = Wechatpay(300) pay(a) pay(j) pay(w)
2. 多態:python處處是多態,python:弱類型語言.
java:強類型語言.
python不管是什麽類型,傳入函數,封裝到對象都可以.
Pyhon不支持Java和C#這一類強類型語言中多態的寫法,但是原生多態,其Python崇尚“鴨子類型”
這些類:都互稱為鴨子類型.
class Str: def index(self): pass class List: def index(self): pass class Tuple: def index(self): pass
3. 封裝
a: 私有靜態字段:類的內部可以訪問,類的外部不可以訪問.
對於私有靜態字段來說,只有在本類中內部訪問,類的外部,派生類均不可訪問.
class B: __money = 1000 class A(B): name = ‘lily‘ __age = 20 def func(self): print(self.__age) #在類的內部實例化對象可以訪問私有靜態字段. print(A.__age) #在類的內部類名可以訪問私有靜態字段. def func1(self): # print(self.__money) #對於私有靜態字段,只有本類中內部可以訪問,類的外部派生類都不可以. # print(A.__money) pass a1 = A() a1.func() # print(a1.__age) #在類的外部,實例化對象不能訪問類中的私有靜態字段 # print(A.__age) #在類的外部,類名不能訪問私有靜態字段 a1.func1()
b: 私有方法:類的內部可以訪問,類的外部和派生類都不可以訪問.
class B: __money = 1000 def __fn(self): print(‘B‘) class A: name = ‘lily‘ __age = 20 def __func(self): print(‘func,,,,‘) def func1(self): self.__func() #在類的內部可以訪問私有方法. # self.__fn() #在類的外部.派生類均不可以訪問靜態方法. a1 = A() # a1.__func() #類的外部不可以訪問私有方法 a1.func1() # print(B._B__money) #盡量不要用. # print(a1._A__age) # print(A._A__age) a1._A__func() A._A__func(1) #類名去訪問類中的方法.一定要傳參數.
c : 面試題:
class Parent: def __func(self): #_Parent__func print(‘in Parent func‘) def __init__(self): self.__func() class Son(Parent): def __func(self): print(‘in Son func‘) son1 = Son() #實例化一個對象son1,自動執行_init_方法, 執行self.__func(),內部實際self._Parent__func #子類中沒有,然後執行 ‘in parent func‘ print(Parent.__dict__)
19 抽象類 接口類 封裝. 多態