10 #### 继承

继承

一定时刻知道,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是哪个类的对象。只要知道是哪个类的对象,就从哪个类开始进行查找

posted @ 2024-09-27 06:17  jhchena  阅读(4)  评论(0编辑  收藏  举报