class A:def bar(self):print("BAR")self.f1() class B(A):def f1(self):print("B") class C:def f1(self):print("C") class D(C,B):pass obj = D() obj.bar() # 創建了類A、B、C、D; # D繼承了C和B,B繼承了A,D內什么都不做,pass; # 創建一個對象obj,類是D,當執行D的bar方法的時候會先從C里面尋找有沒有bar方法; # C內沒有bar方法,然后繼續從B里面查找,B里面也沒有,B的父類是A,A里面有bar方法,所以就執行了A的bar方法; # A的bar方法首先輸出了BAR; # 然后又執行了self.f1(),self=obj,相當于執行了obj.f1(); # 執行obj.f1()的時候先從C里面查找有沒有f1這個方法,C里面又f1這個方法; # 最后就執行C里面的f1方法了,輸出了C
class Foo:#靜態方法括號中沒有self,其方法前一行要加上@staticmethod@staticmethoddef static():print("static")
#靜態方法通過類名+方法名即可執行
Foo.static()
#靜態方法也可以通過對象去訪問,對于靜態方法用類去訪問
obj = Foo()
obj.static()
class Province:#靜態字段contry = "China"def __init__(self,name):self.name = namedef show(self):print(Province.contry,self.name) hebei = Province("河北") hebei.show() hubei = Province("湖北") hubei.show() # 類里面的成員類去訪問,對象內的成員用對象去訪問。
?
class Foo:def __init__(self):self.__Name = "huihuang" # 通過特殊的方法訪問 obj = Foo() #一個下劃線,一個類名,私有的變量名 print(obj._Foo__Name)
?
轉載于:https://blog.ansheng.me/2016/06/python-full-stack-way-object-oriented-advanced.html