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): passobj = 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