python基础——继承与派生、组合
python基础——继承与派生
1 什么是继承:
继承是一种创建新的类的方式,在python中,新建的类可以继承自一个或者多个父类,原始类成为基类或超累,新建的类成为派生类或子类
1.1 继承分为:单继承和多继承
class ParentClass1:#定义父类passclass ParentClass2:#定义父类passclass SubClass1(ParentClass1):#单继承,基类是parentClass1,派生类是SubClasspassclass SubClass2(ParentClass1,ParentClass2):#python支持多继承,用逗号分割开多个继承的类pass
1.2 查看继承
>>> SubClass1.__bases__ (<class '__main__.ParentClass1'>,) >>> SubClass2.__bases__ (<class '__main__.ParentClass1'>, <class '__main__.ParentClass2'>)
提示:如果没有指定基类,python的类会默认继承object类,object是所有python类的基类,它提供了一些常见方法(如__str__)的实现。
>>> ParentClass1.__bases__
(<class 'object'>,)
>>> ParentClass2.__bases__
(<class 'object'>,)
1.3 继承与抽象(先抽象在继承)
抽象即抽取类似或者说比较像的部分。
抽象分成两个层次:
1.将奥巴马和梅西这俩对象比较像的部分抽取成类;
2.将人,猪,狗这三个类比较像的部分抽取成父类。
抽象最主要的作用是划分类别(可以隔离关注点,降低复杂度)
继承:是基于抽象的结果,通过编程语言去实现它,肯定是先经历抽象这个过程,才能通过继承的方式去表达出抽象的结构。
抽象只是分析和设计的过程中,一个动作或者说一种技巧,通过抽象可以得到类
例子:
class Animal:def __init__(self,name,age):self.name=nameself.age=agedef walk(self):def say(self):print('%s is saying'%self.name)
class People(Animal):pass
class Pig(Animal):pass
class Dog(Animal):passp1=People("obama",50)print(p1.name)
print(p1.age)p1.walk() #先找walk名字 找相应的值,去父类找p1.say()
obama
50
obama is walking
obama is saying
1.4 继承与重用性
在开发程序的过程中,如果我们定义了一个类A,然后又想新建立另外一个类B,但是类B的大部分内容与类A的相同时
我们不可能从头开始写一个类B,这就用到了类的继承的概念。
通过继承的方式新建类B,让B继承A,B会‘遗传’A的所有属性(数据属性和函数属性),实现代码重用
class Hero:def __init__(self,nickname,aggressivity,life_value):self.nickname=nicknameself.aggressivity=aggressivityself.life_value=life_valuedef move_forward(self):print('%s move forward' %self.nickname)def move_backward(self):print('%s move backward' %self.nickname)def move_left(self):print('%s move forward' %self.nickname)def move_right(self):print('%s move forward' %self.nickname)def attack(self,enemy):enemy.life_value-=self.aggressivity
class Garen(Hero):passclass Riven(Hero):passg1=Garen('草丛伦',100,300)
r1=Riven('锐雯雯',57,200)print(g1.life_value)
r1.attack(g1)
print(g1.life_value)'''
运行结果
300
243
'''
1.5 继承与派生
1、派生,父类里面没有的,在子类里面定义独有的,派生出新的东西。
2、派生出父类里面重名的东西,再找先找用子类自己的构造方法。
例子:父类里面没有的,在子类里面定义独有的
class Hero:def __init__(self,nicname,aggressivity,life_value):self.nicname=nicnameself.aggressivity=aggressivityself.life_value=life_valuedef attack(self,enemy):enemy.life_value-=self.aggressivity
class Garen(Hero):camp='Demacia'class Riven(Hero):camp='Noxus'g1=Garen('garen',18,200)
r1=Riven('riven',18,200)
print(g1.camp)
print(r1.camp)
输出结果为:
Demacia
Noxus
父类里面重名的东西,再找先找用子类自己的构造方法。
class Hero:def __init__(self,nicname,aggressivity,life_value):self.nicname=nicnameself.aggressivity=aggressivityself.life_value=life_valuedef attack(self,enemy):print('Hero attack')enemy.life_value-=self.aggressivity
class Garen(Hero):camp='Demacia'def attack(self,enemy):Hero.attack(self,enemy)print('from garen attack')def fire(self):print('%s is firing'%self.nicname)class Riven(Hero):camp='Noxus'g1=Garen('garen',18,200)
r1=Riven('riven',18,200)
print(g1.camp)
g1.attack(r1)
print(g1.camp)
输出结果为:
Hero attack
from garen attack
Demacia
延续第二种:在子类里面添加新的独有的功能,如:“script”garen独有的,但是garen的身份在父类里,可以重用父类的功能
在子类中,重用父类的函数,父类名.父类函数(参数)
class Hero:def __init__(self,nicname,aggressivity,life_value):self.nicname=nicnameself.aggressivity=aggressivityself.life_value=life_valuedef attack(self,enemy):print('Hero attack')enemy.life_value-=self.aggressivity
class Garen(Hero):camp='Demacia'def __init__(self,nicname,aggressivity,life_value,script):Hero.__init__(self,nicname,aggressivity,life_value)self.script=scriptdef attack(self,enemy):Hero.attack(self,enemy)print('from garen attack')
g1=Garen('garen',18,2,'人在塔在')print(g1.script)
输出结果为:
人在塔在
2、组合
软件重用的重要方式除了继承之外还有另外一种方式,即:组合
组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合
组合对比继承来说,也是用来重用代码,但是组合描述的是一种“有的关系”
2.1 组合的方式:
用组合的方式建立了类与组合的类之间的关系,它是一种‘有’的关系,比如老师学生有python课程
class Teacher:def __init__(self,name,sex,course):self.name=nameself.sex=sexself.course=course
class Student:def __init__(self,name,sex,course):self.name=nameself.sex=sexself.course=course
class Course:def __init__(self,name,price,period):self.name=nameself.price=priceself.period=period
Course_obj=Course('python','15800','7m')
t1=Teacher('allen','male',Course_obj)
s1=Student('susan','male',Course_obj)
print(s1.course.name)
print(t1.course.name)
输出结果为:
python
python
组合与继承都是有效地利用已有类的资源的重要方式。但是二者的概念和使用场景皆不同
2.2 继承的方式:
通过继承建立了派生类与基类之间的关系,它是一种'是'的关系,比如白马是马,人是动物。
当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好,比如教授是老师
>>> class Teacher:
... def __init__(self,name,gender):
... self.name=name
... self.gender=gender
... def teach(self):
... print('teaching')
...
>>>
>>> class Professor(Teacher):
... pass
...
>>> p1=Professor('egon','male')
>>> p1.teach()
teaching
转载于:https://www.cnblogs.com/niejinmei/p/6762317.html
python基础——继承与派生、组合相关推荐
- Python基础——继承、多态
文章目录 一.slots 二.私有属性和私有方法 三.继承 1.私有属性.私有方法 2.继承的特点(多层继承) 3.新式类和经典类 四.方法的重写 五.多态 一.slots __slots__属性对应 ...
- python基础 继承
继承 继承指的是类与类之间的关系,是一种什么"是"什么的关系,继承的功能之一就是用来解决代码重用问题 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父 ...
- python基础------继承特性
目录 一.定义 1.定义: 2.在Python3 中一个类没有继承另一个类,自动继承object类 二.继承语法 1.语法: 2.类的分类: 3.查看继承的父类 1.格式: 三.方法的复写 1.定义: ...
- c++基础-继承与派生,定义基类person和公有派生类student
①定义基类person,数据成员name,sex,age,构造函数,析构函数,输出name,sex,age的函数display(). ②定义公有派生类student,数据成员:num,构造函数,析构函 ...
- python在数据分析方面的应用、下列说法正确_智慧树知到大数据分析的python基础答案...
智慧树知到大数据分析的python基础答案 在派生类中可以通过 " 基类名 . 方法名 ()" 的方式来调用基类中的方法 . 下面代码的执行结果是 : ( ) a = 10.99 ...
- pythond的执行原理_python基础——继承实现的原理
python基础--继承实现的原理 1 继承顺序 class A(object): def test(self): print('from A') class B(A): def test(self) ...
- Python基础20-面向对象:静态、组合、继承与派生、多态、封装、反射、内置attr方法等
目录 静态 静态属性@property 类方法@classmethod 静态方法@staticmethod 组合 继承与派生 继承与派生 继承顺序 在子类中调用父类方法与super 多态 封装 反射 ...
- Python基础系列讲解——继承派生和组合的概念剖析
Python作为一门面向对象的语言,它的面向对象体系中主要存在这么两种关系,一个是"类"和"实例"的关系,另一个是"父类"和"子类 ...
- python组合和继承_Python基础系列讲解——继承派生和组合的概念剖析
Python作为一门面向对象的语言,它的面向对象体系中主要存在这么两种关系,一个是"类"和"实例"的关系,另一个是"父类"和"子类 ...
最新文章
- 在计算机术语中常用byte表示,2016年计算机一级MS Office上机考试题
- k8s master ping不通node_搭建k8s可用集群
- Mybatis的xml配置备忘
- Struts2.0实现的文件上传(单附件和多附件)以及附件下载功能
- OpenCV图像分割Grabcut算法
- 第十一章:【UCHome二次开发】功能修改
- 关于udelay(); mdelay(); ndelay(); msleep();
- Python中的字典(Dictionary)
- Java fluent风格
- 顶点计划:寝室作息讨论
- 51单片机开发第一步 keilC51 以及 proteus 的安装
- Linux局域网多人聊天软件
- 福禄克气体流量校准解决方案
- List1_Excise
- STM32实现的语音识别的智能垃圾桶
- 死锁预防之银行家算法
- 情商决定了工作方面的成就
- 【软件测试】软件测试基础知识
- Ubuntu基本使用指南
- 技术背景的创业者由于其秉性容易犯三种错误