1. 程式人生 > >多態,封裝

多態,封裝

__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‘

多態,封裝