10 #### 繼承

jhchena發表於2024-09-27

繼承

一定時刻知道,self是哪個類的物件。只要知道是哪個類的物件,就從哪個類開始進行查詢

class  base: # 父類,也可稱為基類
    pass
class Info(base): # 子類,也可稱為派生類
    pass


class  base: # 父類,也可稱為基類
    def f1(self):
        print('f1')
        
class Info(base): # 子類,也可稱為派生類
    def f1(self):
        print('f2')
obj = Info()        
obj.f2()
obj.f1()
  • 案例1
class base:  # 父類,也可稱為基類
    def f1(self):
        print('f1')
class Info(base): # 子類,也可稱為派生類
    def f2(self):
        print('f2')

obj = base()    #由base類建立的物件
obj.f1() # base.f1
obj.f2() # info.f2  報錯,base類不能繼承子類中的方法
        
        
obj2 = Info()    #由base類建立的物件
obj2.f1() # base.f1
obj2.f2() # info.f2

  • 案例2
# 優先從自己裡面查詢,自己裡面,在去父類查詢
class base:  # 父類,也可稱為基類
  
    def f1(self):
        print('f1')
        
class Info(base): # 子類,也可稱為派生類
    def f2(self):
        print('f2')

	def f1(self):
        print('f1')
        
obj = base()    #由base類建立的物件
obj.f1() # base.f1
obj.f2() # info.f2  報錯,base類不能繼承子類中的方法
        
        
obj2 = Info()    #由base類建立的物件
obj2.f1() # Info.f1
obj2.f2() # Info.f2

  • 案例3

重點,不要診斷self代指的就是當前類,一定要看self是誰?是哪個類建立的物件

class base:  # 父類,也可稱為基類

    def f1(self):
        print('base.f1')

    def f2(self):
        print('base.f2')
        self.f1() # 相當於:obj1.f1 -> 先base類找f1


class Info(base):  # 子類,也可稱為派生類
    def f2(self):
        print('Info.f2')
        self.f1()
    def f1(self):
        print('Info.f1')



obj1 = base()  # 由base類建立的物件
obj1.f1()  # base.f2 -> base.f1
# obj.f2從base類找:base.f2,發現找到了,找到後開始執行。先輸出base.f2,後。
# 下句執行為self.f1(),此時當我們看到self時,一定想著說這個self是找表的當前的這個類嗎
# 不是,self不是表示當前類,一定要看self是什麼。 self本質上是一個引數,此時看是哪個在呼叫這個f2,分析發現是obj1呼叫的f2,此時我們看obj1是哪個類的物件
# 發現obj1是base 這個類的物件。所以此時的:self.f1() 相當於:obj1.f1() ,而obj1是base這個類中的物件,所以找f1時,先從base類中進行找f1,當前base類中是有f1
# 此時輸出的:base.f1。

obj2 = Info()  # 由base類建立的物件
obj2.f2()  # Info.f2 -> Info.f2

  • 案例4
    def handler(self):
        self.process()

    def process(self):
        print(123)


class Mixin:
    def process(self):
        print(999)


class ThreadingServer(Mixin, Server):
    pass


obj = ThreadingServer()  # obj = ThreadingServer 例項化物件
obj.run_server()  # 999

# 一定時刻知道,self是哪個類的物件。只要知道是哪個類的物件,就從哪個類開始進行查詢

相關文章