python 面向对象 主动调用其他类成员 + 特殊成员
主动调用其他类成员
1. 什么时候用到主动调用其他类的成员?
比如我们在 类1 中写了5个功能, 在 类2 中写了3个功能, 而我们要完成某项工作, 需要同时用到这两个类中的8个功能,此时就涉及到了,在一个类中主动调用其他类中的成员. 这里的主动调用并非指继承中的调用父类.
2. 主动调用其他类的成员有两种方式 .
方式一 :
比如是 类Foo 调用 类Base 中的 f1() 方法.
在类Foo中 Base.f1(self) # 这里必须手动传入self参数
这里,两个类之间 有无继承关系都可, 这里与继承无关
class Base(object):
def f1(self):
print('5个功能')
class Foo(object): # 这里两个类之间 有无继承关系都可
def f1(self):
print('3个功能')
Base.f1(self) # 类名.方法名(self) 这里需要自己传入self
obj = Foo()
obj.f1()
# 3个功能
# 5个功能
方式二 :
创建对象类 需要继承对象的类
按照 创建对象的类 的继承顺序, 找下一个
使用 super().f1()
示例 1 :
class Base(object): def f1(self): print('5个功能') class Foo(Base): # 创建对象的类 需要继承调用的类 def f1(self): super().f1() # super() 指的是找继承顺序的下一个 print('3个功能') obj = Foo() obj.f1() # 5个功能 # 3个功能
示例 2 :
该示例中, 创建对象的类Info的继承顺序为 : Info >> Foo >> Bar
在Foo类中有 super().f1()
class Foo(object): def f1(self): super().f1() # 继承顺序为下一个为Bar,找Bar中的f1() print('3个功能') class Bar(object): def f1(self): print('6个功能') class Info(Foo,Bar): pass # obj = Foo() # Foo没有继承其他的类 # obj.f1() # f1()中有super() 找不到创建对象的类 继承的类 报错 obj = Info() # Info 先继承Foo 继承Bar obj.f1() # 6个功能 # 3个功能
特殊成员

浙公网安备 33010602011771号