面向对象-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.



'''
原文地址:https://www.cnblogs.com/gongteng/p/13567081.html