#-*- coding:utf-8 -*-
class BaseRequests:
def __init__(self):
print("BaseRequests.ini")
class RequestsHandler(BaseRequests):
def __init__(self):
print('RequestsHandler.init')
BaseRequests.__init__(self) #调用父类的init方法
def server_fork(self):
print('RequestsHandler.server_fork')
self.process_requests()#0
def process_requests(self): #1
print('RequestsHandler.process_requests')
class Minx:
def process_requests(self): #2
print("Minx.process_requests")
class Son(Minx,RequestsHandler):
pass
obj=Son() #init
obj.server_fork()
这里边obj是Son()对象的实例,其中继承了Minx和RequestsHandler两个父类。其中obj对象创建后会先找__init__方法,首先会找Minx这个类,里面没有init方法,就找RequestsHandler类里的init方法,找到后就不会去找基类里的init方法
如果要调用父类的基类init就需要 BaseRequests.__init__(self) #调用父类的init方法,或者super(RequestsHandler,self).__init__().这两种方法。
1.其中在obj调用server_fork()方法的时候里面的self.process_requests()#0会调用 #1还是#2呢? 下面逐步分析!
1)首先先了解#0里的 self.process_requests()的self对象是谁,当然是obj对象。
2)那obj对象是由son类生成,但是son类里没有这个方法,根据多继承3.5以后是广度优先,所以先找Minx类里的process_requests方法找到后就直接调用了,也就不会调用RequestsHandler里的process_requests方法。
所以最终结果如下:
RequestsHandler.init
BaseRequests.ini
RequestsHandler.server_fork
Minx.process_requests