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 ...
随机推荐
- Linux 文本处理工具记录
Shuffle lines of multi files 现在有 1000 个文本文件(0.txt ~ 999.txt),每个文件大概 11M,总共 11G,我想把这 1000 个文本文件的内容随机组 ...
- “短路求值(Short-Circuit Evaluation)
// 逻辑与和逻辑或操作符总是先计算其做操作数,只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解其右操作数. function aa() { if (null) { console ...
- iOS 图片9切
UIImageView *svRect; UIImage *backgroundImage = [UIImage imageNamed:@"bg.png"]; background ...
- Beans 自动装配
http://wiki.jikexueyuan.com/project/spring/beans-auto-wiring/spring-autowiring-byname.html
- 终于有人把P2P、P2C、O2O、B2C、B2B、C2C 的区别讲透了!
原文地址:https://www.cnblogs.com/sap-ronny/p/8149960.html P2P.P2C .O2O .B2C.B2B. C2C,每天看着这些常见又陌生的名词,如果有人 ...
- node命令行工具—cf-cli
音乐分享: 钢心 - <龙王> 初喜<冠军>后喜<龙王> (PS:听一次钢心乐队的演出后采访才知道 “龙王”隐喻的是一起喝酒的老铁....) ——————————— ...
- 将mysql中的一张表中的一个字段数据根据条件导入另一张表中
添加字段:alter table matInformation add facid varchar(99) default ''; 导入数据:update matInformation m set ...
- butterknife-gradle-plugin插件
在android library项目里由于R类中变量不再是final类型而无法使用butterknife,为了解决此问题,Jakewharton大神引入了butterknife-gradle-plug ...
- 【DOS】Win7系统文件夹名太长无法删除问题的解决
一个测试工具产生了几个坑爹文件夹名为n个“x” ,系统提示删除不掉. 网上百度,说什么压缩.写bat文件...统统没用. 猛地看到右击菜单中安装了git客户端工具,想试试看.在该文件夹目录下Git B ...
- P1250 种树
P1250 种树 题目描述 一条街的一边有几座房子.因为环保原因居民想要在路边种些树.路边的地区被分割成块,并被编号成1..N.每个部分为一个单位尺寸大小并最多可种一棵树.每个居民想在门前种些树并指定 ...