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