类的继承和重用

类的继承和重用

一般继承

类和类之间可以互相调用和重用以及继承的,关键点在于如何弄请父类和子类的关系以及调用是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类和非绑定的函数是一个危险行为,这可能导致应该调用的父类函数没有调用或者一个父类函数被调用多次。

时间: 2024-12-24 05:18:51

类的继承和重用的相关文章

【C/C++学院】0822-类型转换函数与构造转换函数/类的继承/类的继承以及区别/继承静态成员与静态函数//继承实现代码重用/单继承QT案例/多继承简介以及实战/Gpu编程

类型转换函数与构造转换函数 #include<iostream> class fushu { public: explicit fushu(int num)//避免隐式转换,引发歧义 { x = num; y = num; } void print() { std::cout << x << "+" << y << "i" << std::endl; } operator int(); //不支

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

类的继承 派生 在子类中重用父类 组合 定义: 继承指的是类与类之间的关系,是一种什么"是"什么的关系,继承的功能之一就是用来解决代码重用问题. 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可以成为基类或超类,新建的类称为派生类或子类. 1 # 我们定义的2个英雄都有一些相似的特征和技能.都属于英雄类,那么我们就可以定义个英雄类,然后让英雄继承英雄类的特征和技能 2 3 class Hero: 4 def __init__(self, name,

python3 面向对象、类、继承、组合、派生、接口、子类重用父类方法

对象是特征(变量)与技能(函数)的结合体而类是一系列对象共同的特征与技能的集合体 class teacher: lesson = "python" def __init__(self,name,color,age): # 只干初始化的活 self.name = name if not isinstance(name,str): raise TypeError self.color = color self.age = age def jineng(self): print('新技能')

JAVA代码重用机制复用类之继承语法(附源码)

前言 继承是所有OOP语言和Java语言不可缺少的组成部分.当创建一个类时,总是在继承,因此,除非已明确指出要从其他类中继承,否则就是在隐式地从Java的标准根类Object进行继承. 组合的语法比较平实,但是继承使用的是一种特殊语法.在继承过程中,需要先声明"新类与旧类相似".这种声明是通过在类主体的左边花括号之前,书写后面紧随基类名称的关键字extends而实现的.当这么做时,会自动得到基类中所有的域和方法.例如: 示例源码 基类 package com.mufeng.thesev

java类的继承-----继承的定义

继承(inheritance)是面向对象编程的核心机制之一,没有使用继承的程序设计,就不能成为面向对象的程序设计. 1.继承的定义 特殊类的对象拥有一般类的全部属性与行为,称为特殊类对一般类的继承.一个类可以是多个一般类的特殊类,也可以从多个一般类中继承属性与行为,但在java语言中,不允许一个类从多个一般类中继承属性与行为,即在java语言中,只支持单继承. 在软件开发中,通过继承机制,可以利用已有的数据类型来定义新的数据类型.所定义的新的数据类型不仅拥有新定义的成员,而且还同时拥有旧的成员.

Java编程里类的继承

今天,我们将要讨论的内容是Java里面类的继承的相关概念. 说到继承,我相信大家都不陌生.生活中,子承父业,子女继承父母的财产,这就是继承.实际上,Java里的继承也是如此.对于一个类来说,它的数据成员和方法就是它的财产,而申明另一个类接收了这个类的财产,这就是Java里的继承. 接下来我将就几个方面,谈一谈继承的相关知识. 一.继承的基本格式与意义 在上文,我们了解了什么叫做继承.那么,如何使用继承? 继承的关键词是extends.继承的一般格式为:public class 类名 extend

C#类的继承相关总结

1.子类继承父类,会拥有父类中所规范的所有成员,但是只能是使用其中的公共成员 2.实现了继承,可以做到代码的冗余,做到代码的重用 3.实现了继承,可以方便代码的扩展与修改 4,当子类拥有与父类相同签名(声明与定义)的成员时,子类的成员就会将父类的同名成员隐藏(不是覆盖,还是可以调用父类的成员的,通过base关键字) 继承的前提: 1.一个类,要是父类,那么它,必须拥有子类的共同成员 实现继承的条件 1.子类是父类,例如,学生类,也是人类. 2.子类必须能够实现父类所规范的所有成员 继承的三大特性

类的继承

继承是相对两个类而言的父子关系,子类继承了父类的所有公有属性和方法,继承可以重用已经存在的方法和属性,减少代码的重复编写,Python 在类名后使用一对括号来表示继承关系,括号中的类即为父类,如 class Myclass(ParentClass) 表示 Myclass(子类) 继承了 ParentClass(父类) 的方法和属性 #!/usr/bin/python class People(object): color = 'yellow' def think(self): print "I

Day17:类的继承、派生、组合和接口

一.类的继承.派生和组合 继承是一种创建新类的方式,在Python中,新类可以继承一个或多个父类,父类又可称为基类或者超类,新建的类称为派生类或子类. 在Python3中,所有类都默认继承object,都是新式类.在Python2中,有经典类和新式类.没有继承object类以及object的子类的类都是经典类. 1.继承 Python中类的继承分为:单继承和多继承 class ParentClass1: #定义父类 pass class ParentClass2: #定义父类 pass clas