类的继承和重用

Posted 图样图拿义务

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类的继承和重用相关的知识,希望对你有一定的参考价值。

类的继承和重用

一般继承

类和类之间可以互相调用和重用以及继承的,关键点在于如何弄请父类和子类的关系以及调用是self,对象以及类之间的关系,调用其他类作为其属性其实就是直接调用其他类里面的函数属性,看准参数中的self

# 作业一:定义如下类,并最大程度地重用代码(使用继承或组合,派生+子类重用父类方法)
#
#   老师类
#   学生类
#   分数类
#   课程类
#   日期类
?
?
class Date:
    def __init__(self, date):
        self.date = date
?
    def date(self):
        print(‘your birthday is %s‘ % self.date)
?
?
class People:
    def __init__(self, name, age, sex, date):
        self.name = name
        self.age = age
        self.sex = sex
        self.date = Date(date)
?
    def eat(self):
        print(‘%s is eating‘ % self.name)
?
    def drink(self):
        print(‘%s is drinking‘)
?
    def xiang(self):
        print(‘%s is xianging‘ % self.name)
?
    def piss(self):
        print(‘%s is pissing‘ % self.name)
?
    def walk(self):
        print(‘%s is walking‘ % self.name)
?
?
class Score:
    def __init__(self, score):
        self.score = score
?
    def score(self):
        print(‘your score is %s‘, self.score)
?
?
class Course:
    def __init__(self, course):
        self.course = course
?
    def course(self):
        print(‘your course is %s‘ % self.course)
?
?
class Student(People):
    def __init__(self, name, age, sex, school, score, course):
        People.__init__(self, name, age, sex)
        self.school = school
        self.score = Score(score)
        self.course = course
?
    def study(self):
        print(‘%s is studying‘ % self.name)
?
?
class Teacher(People):
    def __init__(self, school, name, age, sex, course):
        People.__init__(self, name, age, sex)
        self.school = school
        self.course = Course(course)
?
    def teach(self):
        print(‘% is teaching‘ % self.name)
?
?
if __name__ == ‘__main__‘:
    p = Student(‘rendawei‘, ‘18‘, ‘male‘, ‘oldboy‘)
    p.study()
?
?

super继承

我们在处理类的继承问题时一般都是通过调用父类的函数属性来打到调用父类的方法,但是,如果父类改变的话,需要修改的地方很多,因此,引入super关键字来打到自动传值的效果

class People:
    def __init__(self, name, age):
        self.name = name
        self.age = age
?
?
class Teacher(People):
    def __init__(self, name, age):
        super().__init__(name, age)
?
if __name__ == ‘__main__‘:
    egon = Teacher(‘egon‘, 73)
    print(egon.name)
    print(egon.age)

super并不是一个函数,是一个类名,形如super(B, self)事实上调用了super类的初始化函数,产生了一个super对象;

super类的初始化函数并没有做什么特殊的操作,只是简单记录了类类型和具体实例;

super(B, self).func的调用并不是用于调用当前类的父类的func函数;

Python的多继承类是通过mro的方式来保证各个父类的函数被逐一调用,而且保证每个父类函数只调用一次(如果每个类都使用super);

混用super类和非绑定的函数是一个危险行为,这可能导致应该调用的父类函数没有调用或者一个父类函数被调用多次。

 

以上是关于类的继承和重用的主要内容,如果未能解决你的问题,请参考以下文章

Day 5-2 类的继承和派生,重用

代码重用和接口重用

C ++中的私有继承以及如何重用但修饰基类的运算符? [复制]

深度解析:java必须掌握的知识点——类的重用

深度解析:java必须掌握的知识点——类的重用

Java基础——类的继承