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 @staticmethod def static(): print("static") #静态方法通过类名+方法名即可执行 Foo.static() #静态方法也可以通过对象去访问,对于静态方法用类去访问 obj = Foo() obj.static()
class Province: #静态字段 contry = "China" def __init__(self,name): self.name = name def 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