class,python_day24_class_類_繼承

 2023-10-21 阅读 26 评论 0

摘要:#-----------------繼承(兒子繼承父親的東西,但是不一定全部繼承),二級繼承--------------------## class Father:# def basketball(self):# pass# def soccer(self):# pass# class son(Father): #為son這個類指定繼承的類Father,稱son為子類,Father為父類。或稱son為派
#-----------------繼承(兒子繼承父親的東西,但是不一定全部繼承),二級繼承--------------------#
# 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




















轉載于:https://www.cnblogs.com/YiYA-blog/p/9844297.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/154833.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息