Python3 类和继承和组合
import random as r class Fish:
def __init__(self):
self.x = r.randint(0,10)
self.y = r.randint(0,10) def move(self):
self.x -= 1
print('我的位置是:%s - %s'%(self.x, self.y)) class GoldFish(Fish):
pass class Shark(Fish):
def __init__(self):
#Fish.__init__(self)
super().__init__()
#super不需要给出基类/父类的名字,如果有多重继承,
#则只需要修改引用时的父类名称,不需要每次都修改全部被继承的方法
self.hungry = True def eat(self):
if self.hungry:
print('Eat it up')
self.hungry = False
else:
print('Full')
注意如果子类Shark()引用父类Fish()时,如果不使用super()函数,则Shark()子类产生的对象时没法调用move()方法的,因为不存在x,y参数
使用super()函数,则可以move(),而且只需要指出父类的方法,不需要self。
如果有多重继承,则只需要修改Shark(Fish)中的Fish名称,不需要修改super()函数内的方法名,super()函数会自动找到父类的方法。
“super函数超级之处在于你不需要明确给出任何基类的名字,它会自动帮你找出所有积累以及对应的方法。由于不用给出基类的名字,这就意味着你如果改变了类继承关系,只要改变class语句里的父类即可,而不必在代码中修改所有被继承的方法”
另一个例子:
class A():
def __init__(self):
print('进入A')
print('离开A') class B(A):
def __init__(self):
print('进入B')
#A.__init__(self)
super().__init__()
print('离开B') class C(A):
def __init__(self):
print('进入C')
#A.__init__(self)
#super().__init__()
print('离开C') class D(B,C):
def __init__(self):
print('进入D')
#B.__init__(self)
#C.__init__(self)
super().__init__()
print('离开D')
d=D()会出现什么呢?
##############################
组合:
class Turtle:
def __init__(self,x):
self.num = x class Fish:
def __init__(self,x):
self.num = x class Pool:
def __init__(self, x, y):
self.turtle = Turtle(x)
self.fish = Fish(y)
def print_num(self):
print('水池里共有%d只乌龟,%d只鱼'%(self.turtle.num, self.fish.num))
#这就是组合,把一个类的对象,放到另一个类里引用
#这不是继承,是组合
把没有关系的类进行组合,可以避免继承的一些问题
##############################
mixin:
https://fishc.com.cn/thread-48888-1-1.html
Python3 类和继承和组合的更多相关文章
- python3 面向对象、类、继承、组合、派生、接口、子类重用父类方法
对象是特征(变量)与技能(函数)的结合体而类是一系列对象共同的特征与技能的集合体 class teacher: lesson = "python" def __init__(sel ...
- Day 23 类的继承,派生,组合,菱形继承,多态与多态性
类的继承 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类 继承的特性是:子类会遗传父类的属性 继承是类与类之间的关系 为什么用继承 使用继承可以减少代码的冗余 对象的继承 python中 ...
- Python3 类的继承
目录 继承的基本概念 什么是继承 继承有什么用 如何实现继承 初识继承 寻找继承关系 如何寻找继承关系 实例演示 继承背景下的对象属性查找顺序 派生 新式类和经典类 钻石继承 通过继承实现修改json ...
- Python3 类的继承小练习
1.打印并解释结果 class Parent(object): x = 1 class Child1(Parent): pass class Child2(Parent): pass print(Pa ...
- Python基础(16)_面向对象程序设计(类、继承、派生、组合、接口)
一.面向过程程序设计与面向对象程序设计 面向过程的程序设计:核心是过程,过程就解决问题的步骤,基于该思想设计程序就像是在设计一条流水线,是一种机械式的思维方式 优点:复杂的问题的简单化,流程化 缺点: ...
- Python3 面向对象-类的继承与派生
1.什么是继承? 继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类可称为基类或超类,新建的类称为派生类和或子类. 子类会遗传父类的属性,从而解决代码重用问题. ...
- Day 18 :面向对象[基础,继承,组合]类的增删改查
有的人说,编程有3种范式: 1.面向过程:就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了. 2.面向函数:面向函数是面向过程的升级版,也就是把每个 ...
- python3 入门 (四) 类与继承
Python 类 Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法. 对象可以包含任意数量和类型的数据. p ...
- Inheritance, Association, Aggregation, and Composition 类的继承,关联,聚合和组合的区别
在C++中,类与类之间的关系大概有四种,分别为继承,关联,聚合,和组合.其中继承我们大家应该都比较熟悉,因为是C++的三大特性继承Inheritance,封装Encapsulation,和多态Poly ...
随机推荐
- Android AVD启动报错: This AVD's configuration is missing a kernel file! Please ensure the file "kernel-qemu" is in the same location as your system image.
启动Android SDK manager重新下载安装
- Emit 自动生成IL代码,注入代码
Spring 框架中的注入代码,以及自动生成对接口的实现,则根据il代码注入 Emit学习(1)-Emit概览 一.Emit概述 Emit,可以称为发出或者产生.在Framework中,与Emit相关 ...
- HDU-1709 The Balance(生成函数)
题意 给$n$个数,有哪些属于$1$到$n$个数字总和$sum$的数是通过该集合任意子集之间的加减运算无法得到的. 思路 对每个数构造$x^{-a[i]}+1+x^{a[i]}$,为了避免负幂次可以将 ...
- php curl请求
multipart/form-data 方式 post的curl库,模拟post提交的时候,默认的方式 multipart/form-data ,这个算是post提交的几个基础的实现方式. $post ...
- spring cloud 集群健康监控--turbine-dashboard仪表盘
这里仍然以Windows和jdk为运行环境,按照下面的步骤打包-运行-访问就能看到效果. 运维健康监控--hystrix-dashboard仪表盘 java -jar F:\jars-dashboar ...
- linux常用命令【原创】
查看文件内容-while: cat 1.txt|while read line;do echo $line;done while read line; do echo $line; done < ...
- postgresql分析函数
参考:https://blog.csdn.net/haohaizijhz/article/details/83340814 SELECT uid, odate, num, sum(num) over ...
- C# EntityFramework Code First 迁移
如果使用的是 Code First 工作流,推荐使用 Code First 迁移改进应用程序的数据库架构. 迁移提供一组允许以下操作的工具: 创建可用于 EF 模型的初始数据库 生成迁移以跟踪对 EF ...
- 2018年最新JAVA面试题总结之框架(4)
转自于:https://zhuanlan.zhihu.com/p/40098726 1.谈谈对spring框架的了解 ,spring有什么作用(IOC,AOP),spring的核心是什么?回答:Spr ...
- Zabbix (三)
一.zabbix支持的主要监控方式: zabbix主要Agent,Trapper,SNMP,JMX,IPMI这几种监控方式,本文章主要通过监控理论和实际操作测试等方式来简单介绍这几种方式的监控原理和优 ...