• 面向对象-04


    '''
    主动调用其他类的成员:
    假如我现在有这样一个需求: 我想8个功能全部执行,则就需要f1与f2都执行才够.

    方法一:
    class Base(object):

    def f1(self):
    print('5个功能')

    class Foo(Base):

    def f2(self):
    print('3个功能')
    Base.f1(self) #注意了,用类也可以调用实例方法,只是你需要自己传参,也即系统不会自动帮你传self.在f2中调用f1,实现了主动调
    用其他类成员,但要注意自己需要主动传个self参数进去.

    obj = Foo()
    obj.f1() #其实类名调用实例方法也是可以的,但我们之所以用对象来调用,是因为用对象调用时系统会自动传参,而用类名时,是不会主动进行传参的
    #eg: obj = Base()
    Base.f1(obj) #用类名时需要自己把对象obj给传进来


    方法二:
    class Base(object):

    def f1(self):
    print('5个功能')

    class Foo(object):

    def f1(self):
    print('3个功能')
    super().f1() #super是按照类的继承顺序,找当前类的上一个.要注意谁进的super,那就找谁的上一个.

    class Info(Foo, Base):
    pass

    obj = Info()
    obj.f1()
    #执行顺序是,Info现在自己里面找f1,发现没有就去离他最近的父类Foo里面找f1,在Foo里面又出现了super调用f1,因为对象是Info的对象,所以传进
    f1中的self也是Info的对象,因此是Info进的super,所以找的应该也是Info类的上一个.根据继承关系Base类最远,也即为Info的上一个类,因此
    最终执行的是Base中的f1.



    '''
  • 相关阅读:
    单词统计
    意见汇总
    项目评审结果
    注册表键值
    C++ 创建快捷方式
    XPosed 示例
    直播流程
    C++隐藏任务栏图标
    C++ 屏幕录制
    DUILIB UI创建过程
  • 原文地址:https://www.cnblogs.com/gongteng/p/13567081.html
Copyright © 2020-2023  润新知