多態,封裝
阿新 • • 發佈:2019-03-25
__main__ weak error: div mod 調用 on() ava span
# # # # python 面向對象的三大特征之一 # # # # python多態:python中處處都是多態 python是一種弱類型的語言 # # # # java 是強類型語言 # # # # 比如:python中 name = "qq", java中 int_i = 666 如果之間直接改變類型。python可以直接改變,java則會報錯 # # # # # # # python的鴨子類型:看著像鴨子,他就是鴨子。 # # # # 這些類中都有index 方法,這些類都互稱為鴨子,這個不強制。不過盡量使用相同的方法名。可以抽象類統一化使用 # # # class Str:# # # def index(self): # # # pass # # # # # # class List: # # # def index(self): # # # pass # # # # # # class Tuple: # # # def index(self): # # # pass # # # # # # # 廣義的封裝:實例化一個對象,給對象封裝一些屬性 # # # 狹義的封裝: 私有制 # # # 私有成員: 私有靜態字段:私有方法,私有對象屬性 # # # # class A:# # name = "yan" # # __age = "9999" # # def func(self): # # print(self.__age) # # print(A.__age) # # print("in the func") # # # # a = A() # # print(a.name) # # print(A.name) # # # print(A.__age) # 類名不能調用私有靜態字段 # # # print()a.__age # 實例對象不能訪問靜態字段 # # # # 對於私有靜態字段來說,類的外部不能訪問# # a.func() # 對於私有靜態字段來說,類的內部可以訪問 # # print(A.__dict__) # {‘__module__‘: ‘__main__‘, ‘name‘: ‘yan‘, ‘_A__age‘: ‘9999‘, ‘func‘: <function A.func at 0x000001D9035667B8>, ‘__dict__‘: <attribute ‘__dict__‘ of ‘A‘ objects>, ‘__weakref__‘: <attribute ‘__weakref__‘ of ‘A‘ objects>, ‘__doc__‘: None} # # # 發現有_A__age 這個變量,想辦法訪問他 # # # # print(A._A__age) # # print(a._A__age) # 訪問成功。最好不要使用這種方法 # # # # # class B: # # __money = 9999999999999 # # # # # # class A(B): # # name = "yan" # # __age = "9999" # # def func(self): # # print(self.__age) # # print(A.__age) # # print("in the func") # # # # def find_money(self): # # print(self._B__money) # 對於私有靜態字段來說,只能在本類中內部訪問,在類的外部或者其派生類中不可訪問 # # # # a = A() # # a.find_money() # ok # # # print(A.__dict__) # # # # 私有方法 # # class B: # def __func(self): # print("$2000000000") # # def func2(self): # self.__func() # class A(B): # def __func(self): # print("func A") # # def func1(self): # super().func2() # 自動傳self # self.__func() # 常規使用方法 # # a = A() # a.func1() # 常規方法 # # a._A__func() # 最好不要使用 # 面試題 class Parent: def __func(self): print("In the parent") def __init__(self): self.__func() class Son(Parent): def __func(self): print("In the son") s1 = Son()
class A: def __init__(self,name,age,sex): self.name = name self.__age = age self.__sex = sex def func(self): print(self.__age) a = A("y",999,"1") print(a.name) a.func() # print(a.__age) # 不能訪問 # print(a.__dict__) # {‘name‘: ‘y‘, ‘_A__age‘: 999, ‘_A__sex‘: ‘1‘} print(a._A__age) # print(A._A__age) # AttributeError: type object ‘A‘ has no attribute ‘_A__age‘ # print(A.__dict__) # print(A.name) #AttributeError: type object ‘A‘ has no attribute ‘name‘
多態,封裝