#-----------------繼承(兒子繼承父親的東西,但是不一定全部繼承),二級繼承--------------------#
# class Father:
# def basketball(self):
# pass
# def soccer(self):
# pass
# class son(Father): #為son這個類指定繼承的類Father,稱son為子類,Father為父類。或稱son為派生類,Father為基類
# def table(self):
# pass
# s=son()
# s.soccer()
#-----------------繼承(兒子繼承父親,父親繼承爺爺),三級繼承--------------------#
# class Grandfather:
# def tennis(self):
# pass
# class Father(Grandfather):
# def basketball(self):
# pass
# def soccer(self):
# pass
# class son(Father): #為son這個類指定繼承的類Father,稱son為子類,Father為父類。或稱son為派生類,Father為基類
# def table(self):
# pass
# s=son()
# s.tennis() #孫子繼承爺爺的對象
# s.soccer() #兒子繼承父親的對象
#-----------------繼承,實例--------------------#
# class F:
# def f1(self): #第116行
# print('F.f1')
#
# def f2(self): #如果不想讓s去繼承這個對象,那么在s這個類中也構造一個f2對象即可,在自己里面找到類,就肯定不去別人那里找了
# print('F.f2')
# class s(F):
# def s1(self): #第122行
# print('s.s1')
# obj = s()
# obj.s1() #這一句去執行的時候,此時第122行的s1中的self是形參,代之obj
# obj.f1() #哪個對象去調用,self就代之那個,第116行的self也代之obj。 self永遠指代調用方法的調用者,此時f1是調用方法,obj是調用者
#-----------------繼承,既執行父類的foo()方法,也執行子類中的foo()方法--------------------# *****
# class F: #父類
# def f1(self): #第116行
# print('F.f1')
#
# def f2(self): #如果不想讓s去繼承這個對象,那么在s這個類中也構造一個f2對象即可,在自己里面找到類,就肯定不去別人那里找了
# print('F.f2')
# class s(F): #子類
# def s1(self): #第122行
# print('s.s1')
# super(s,self).f2() #找到父級的類,再找到父級這得方法f2(),其中super的第一個參數必須為子類的類名,第二個參數均為self
# #super(s,self).f2()也有執行父類這得f2()方法的作用,用下main這一句也可以代替上一句
# F.f2(self) #這一句可以代替上一句,功能一樣的,但是必須有形參self,但是推薦用super()
# obj = s()
# obj.s1() #這一句去執行的時候,會執行子類中的s1()方法,也會去執行父類中的f2()方法,所以最后先打印s.s1 再打印F.f2
#以上的具體實際應用:父類中的f1和f2方法可以是別人寫的函數,自己拿過來調用,而子類這的s1方法是自己寫的函數
#這子類中添加父類的方法,這樣這執行的時候,這樣就可以不破壞別人代碼的基礎上去執行別人的代碼,也可以執行自己的代碼
# #-------------------多繼承-----------------------#
# class F1:
# def a(self):
# print('F1,a')
# class F2:
# def a(self):
# print('F2.a')
# class S(F1,F2): #類既繼承F1也繼承F2,最左邊的具有最高的優先級,優先被調用
# pass
# obj = S()
# obj.a() #打印F1,a
#-------------------兩個類中含有相同的方法(函數),去執行的順序-----------------------#
# class BaseHandler:
# pass
# class RequestHandler(BaseHandler):
# def sever_forever(self):
# print('RequestHandler.sever_forever')
# self.process_request() #第166行,這里的self就是obj,obj又是son這個類的方法,所以執行這一句時候,
# # son會首先去自己類里面的方法,去找有沒有process_request(),如果沒有再去son繼承的父類中去找process_request()
# #而son繼承了Minx類,Minx中正好有process_request()這個方法,所以第166行會去Minx中去執行process_request()方法
# def process_request(self):
# print('RequestHandler.process_request')
# class Minx:
# def process_request(self):
# print('Minx.process_request')
# class son(Minx,RequestHandler):
# def a(self):
# print('F2.a')
#
# obj = son()
# obj.sever_forever() #打印 RequestHandler.sever_forever和Minx.process_request
#-------------------兩個類中含有__init___(self)方法-----------------------#
class BaseHandler:
def __init__(self):
print('BaseHandler.__init__')
class RequestHandler(BaseHandler): #RequestHandler去繼承BaseHandler
def __init__(self):
print('RequestHandler.__init__')
#BaseHandler.__init__(self) #加上這一句也會去執行aseHandler.__init__(self)方法,勿忘加self
def sever_forever(self):
print('RequestHandler.sever_forever')
self.process_request()
def process_request(self):
print('RequestHandler.process_request')
class Minx:
def process_request(self):
print('Minx.process_request')
class son(Minx,RequestHandler):
def a(self):
print('F2.a')
obj = son() #打印RequestHandler.__init__。這一句只執行RequestHandler中的__init__()方法,其余RequestHandler中的方法不再執行
#上一句執行時會首先去找son類中有沒有__init__()方法,
# 發現在son內沒有,在Minx內也沒有,而在另一個父類RequestHandler中有__init__()方法,所以就會首先去
# 執行RequestHandler中的__init__()方法,而RequestHandler的父類中BaseHandler也有__init__()方法,但不再去執行
#除非在RequestHandler中的__init__(self)方法中有Base.__init__(self)或者super(RequestHandler,self).__init__()語句
obj.sever_forever() #打印 RequestHandler.sever_forever和Minx.process_request
#-------------------類中的方法調用時,別的函數是否也會被調用的問題,答案是不會執行。。。-----------------------#
class RequestHandler(BaseHandler): #RequestHandler去繼承BaseHandler
def __init__(self):
print('RequestHandler.__init__')
def sever_forever(self):
print('RequestHandler.sever_forever')
self.process_request()
def process_request(self):
print('RequestHandler.process_request')
obj = RequestHandler() #打印RequestHandler.__init__ 這一句只執行RequestHandler中的__init__()方法,其余RequestHandler中方法不再執行
obj.server_forever() #打印 RequestHandler.sever_forever和RequestHandler.process_request
#上一句只執行server_forever()
obj.process_request() #這一句就只執行process_request()這一個方法了
今天給我的臺式機換了win10系統,感覺會是一個新的開始吧
hiajing in HZ
2018.10.24