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 类和继承和组合的更多相关文章

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

    对象是特征(变量)与技能(函数)的结合体而类是一系列对象共同的特征与技能的集合体 class teacher: lesson = "python" def __init__(sel ...

  2. Day 23 类的继承,派生,组合,菱形继承,多态与多态性

    类的继承 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类 继承的特性是:子类会遗传父类的属性 继承是类与类之间的关系 为什么用继承 使用继承可以减少代码的冗余 对象的继承 python中 ...

  3. Python3 类的继承

    目录 继承的基本概念 什么是继承 继承有什么用 如何实现继承 初识继承 寻找继承关系 如何寻找继承关系 实例演示 继承背景下的对象属性查找顺序 派生 新式类和经典类 钻石继承 通过继承实现修改json ...

  4. Python3 类的继承小练习

    1.打印并解释结果 class Parent(object): x = 1 class Child1(Parent): pass class Child2(Parent): pass print(Pa ...

  5. Python基础(16)_面向对象程序设计(类、继承、派生、组合、接口)

    一.面向过程程序设计与面向对象程序设计 面向过程的程序设计:核心是过程,过程就解决问题的步骤,基于该思想设计程序就像是在设计一条流水线,是一种机械式的思维方式 优点:复杂的问题的简单化,流程化 缺点: ...

  6. Python3 面向对象-类的继承与派生

    1.什么是继承? 继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类可称为基类或超类,新建的类称为派生类和或子类. 子类会遗传父类的属性,从而解决代码重用问题. ...

  7. Day 18 :面向对象[基础,继承,组合]类的增删改查

    有的人说,编程有3种范式: 1.面向过程:就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了. 2.面向函数:面向函数是面向过程的升级版,也就是把每个 ...

  8. python3 入门 (四) 类与继承

    Python 类 Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法. 对象可以包含任意数量和类型的数据. p ...

  9. Inheritance, Association, Aggregation, and Composition 类的继承,关联,聚合和组合的区别

    在C++中,类与类之间的关系大概有四种,分别为继承,关联,聚合,和组合.其中继承我们大家应该都比较熟悉,因为是C++的三大特性继承Inheritance,封装Encapsulation,和多态Poly ...

随机推荐

  1. count

    select deptno as 部门,count(*) as 人数from emp group by deptno;  --统计各个部门的人数

  2. 毕业设计——Django表单重复提交问题

    1. 先记录一些正常情况:在填写表单页面(如注册.登录页面)时刷新页面时数据清空是正常的,此时就是重新发送了一个页面请求. 2. 问题一:用户登录后,刷新登陆后的页面(如首页)时会出现表单重复提交问题 ...

  3. word20170106在机场 At the airport有用的词和句子

    有用的词: airport terminal: 航站楼 domestic flight: 国内航班 international flight: 国际航班 checked luggage: 托运行李 c ...

  4. Centos 上部署 tomcat7

     在 Centos 上部署 tomcat7 搜索tomcat,选下面红色框框的官网 选箭头指着的版本7, 选 tar.gz 格式, 下载完压缩包,使用 ftpx 工具,放在 centos 的 /opt ...

  5. Spring Boot系列(二) Spring Boot 之 REST

    Rest (Representational Stat Transer) 是一种软件架构风格. 基础理论 架构特性 性能 可伸缩 简化的统一接口 按需修改 组件通信透明 可移植 可靠性 架构约束 C/ ...

  6. Ansible-----include

    什么是include 在ansible中,我们可以通过include,在一个playbook中包含另一个文件,以便实现代码的重复利用. include_tasks模块 include_tasks模块用 ...

  7. mina statemachine解读(一)

      statemachine(状态机)在维护多状态数据时有非常好的作用,现在github上star排名最前的是squirrel-foundation以及spring-statemachine,而min ...

  8. 「JavaScript面向对象编程指南」对象

    对象的属性名可加上引号,下面三行代码所定义的内容是完全相同的 var hero = { occupation : 1 }; var hero = { "occupation" : ...

  9. day11 函数的参数列表

    """ 今日内容: 1.函数参数的分类 2.形参是对实参的值拷贝 3.实参的分类 4.形参的分类 5.打散机制 附1:字符串的比较 """ ...

  10. docker安装小笔记

    作者:邓聪聪 yum update Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker docker卸载旧版本(如 ...