1. 程式人生 > >python day19--面向物件,藉口,封裝

python day19--面向物件,藉口,封裝

#1.介面類,物件類。規範類中方法的統一。

# 第一版:三個類,每個類中有相同的方法
# class Alipay:
#     def __init__(self,money):
#         self.money=money
#     def pay(self):
#         print('用支付寶支付了{}錢'.format(self.money))
# class JDpay:
#     def __init__(self,money):
#         self.money=money
#     def pay(self):
#         print('用白條支付了{}錢'.format(self.money))
# class Wechatpay: # def __init__(self,money): # self.money=money # def pay(self): # print('用微信支付了{}錢'.format(self.money)) # p1=Alipay(200) # p2=JDpay(300) # p3=Wechatpay(260) # p1.pay()#用第一種方法付錢 #第二版:改進,讓方法一樣 # class Alipay: # def __init__(self, money): # self.money = money
# def pay(self): # print('用支付寶支付了{}錢'.format(self.money)) # class JDpay: # def __init__(self,money): # self.money=money # def pay(self): # print('用京東支付了{}錢'.format(self.money)) # class Wechatpay: # def __init__(self,money): # self.money=money # def pay(self):
# print('用微信支付了{}錢'.format(self.money)) # def pay(obj):#統一pay的方法 # obj.pay # a1=Alipay(200) # pay(a1)#歸一化設計 #第三版,制定規則讓方法統一 # from abc import ABCMeta,abstractmethod # # class payment(metaclass=ABCMeta): # @abstractmethod # def pay(self):pass#繼承它的類中必須有pay這個方法,方法名也要相同。 # class Alipay(payment): # def __init__(self,money): # self.money=money # def pay(self): # print('用支付寶支付了{}錢'.format(self.money)) # class JDpay(payment): # def __init__(self,money): # self.money=money # def pay(self): # print('用京東支付了{}錢'.format(self.money)) # class Wechatpay(payment): # def __init__(self,money): # self.money=money # def pay(self): # print('用微信支付了{}錢'.format(self.money)) # def pay(obj): # obj.pay() # w1=Alipay(200) # a2=JDpay(100) # pay(w1) # pay(a2) # 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('支付寶支付{}錢'.format(self.money)) # def pay(obj): # obj.pay() # w1=Alipay(100) # pay(w1) # 2.多型:python沒有多型, 處處是多型 #python弱型別語言,不管什麼型別傳入函式,封裝到函式都可以。 #python有鴨子型別,是一種思想。 # class Animal: # def eat(self): # pass # class Person: # def eat(self): # pass # class machine: # def eat(self): # pass #這些類 都互稱為鴨子.有相同的方法,名字相同。 #3.封裝 #廣義的封裝:例項化一個物件,給物件空間封裝一些屬性。 #狹義的封裝:私有制 #私有成員:私有靜態欄位,私有方法,私有物件屬性 #1)私有靜態欄位 # class me: # __age=20 # def __init__(self): # print(self.__age) # def my(self): # print(me.__age) # class Anyone(me): # __name='alen' # def func(self): # print(Anyone.__name)#內部可以訪問 # def func1(self): # # print(self.__name) # print(self.age) # a1=Anyone()#可以訪問父類中__init__中的私有欄位 # print(a1.__name)#例項化物件不能訪問私有欄位 # print(Anyone.__name)#類名不能訪問私有欄位 # 對於私有靜態欄位,類的外部不能訪問. # print(a1.func())#函式內部可以訪問 # 對於私有靜態欄位,類的內部可以訪問. # print(a1.func1()) # 對於私有靜態欄位來說,只能在本類中內部訪問,類的外部,派生類均不可訪問. # print(a1.my())#本類可以訪問 #2)私有方法 # class A: # __my="asdfa" # def __mylove(self): # print('woaini') # class B(A): # def __youlove(self): # print('oh my god') # def funck(self): # # self.__mylove# 類的派生類也不能訪問. # self.__youlove()#類內部的方法可以訪問 # a1=B() # # a1.__youlove()#不能在類外部執行方法 # a1.funck()# 類的派生類也不能訪問. # class brith: # __air='020' # def __bb(self): # print('呼吸空氣') # def __init__(self): # self.__bb() # # class day(brith): # def __aa(self): # print('阿斯頓傳送到') # # a1=day()