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个功能

 

 

 

 

 

 

 

 

 

 

特殊成员

 

posted @ 2018-08-29 16:43  葡萄想柠檬  Views(310)  Comments(0)    收藏  举报
目录代码