python子类重用父类的两种方式

#在子类派生的新方法中重用父类功能的两种方法
# 方式一:与继承无关
# 指名道姓法,直接用类名.函数名的方法
# 注意只能当普通函数用,需要把所有的值传入

class OldboyPeople:
    school='oldboy'

    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex

class OldboyStudent(OldboyPeople):
    def __init__(self,name,age,sex,stu_id):
        OldboyPeople.__init__(self,name,age,sex)#指明道姓法
        self.stu_id=stu_id

    def choose_course(self):
        print('%s is choosing course'%self.name)


# 方式二:严格来继承属性查找关系

# super()会得到一个特殊的对象,该对象就是专门用来访问父类中的属性的(按照继承的关系 )
#
# super().__init__(不用为self传值)
#
# 注意:super的完整的用法是super(自己的类名,self),在python2中要写完整,而在
# python3则不用,直接用super()

class OldboyPeople:
    school='oldboy'
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex

class OldboyStudent(OldboyPeople):

    def __init__(self,name,age,sex,stu_id):
        super(OldboyStudent,self).__init__(name,age,sex)
        self.stu_id=stu_id

    def choose_course(self):
        print('%s is choosing course'%self.name)

stu1=OldboyStudent('林',18,'male',3)
print(stu1.__dict__)
print(OldboyStudent.mro())


class A:
    def f1(self):
        print('a.f1')

class B:
    def f2(self):
        super().f1()#按C的查找顺序找
        print('b.f2')

class C(B,A):
    pass


obj=C()
print(C.mro())
obj.f2()
#C->B->A->object

猜你喜欢

转载自blog.csdn.net/qq_35540539/article/details/80836481