博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python3 类和继承和组合
阅读量:6068 次
发布时间:2019-06-20

本文共 2138 字,大约阅读时间需要 7 分钟。

1 import random as r 2  3 class Fish: 4     def __init__(self): 5         self.x = r.randint(0,10) 6         self.y = r.randint(0,10) 7  8     def move(self): 9         self.x -= 110         print('我的位置是:%s - %s'%(self.x, self.y))11 12 class GoldFish(Fish):13     pass14 15 class Shark(Fish):16     def __init__(self):17         #Fish.__init__(self)18         super().__init__()19         #super不需要给出基类/父类的名字,如果有多重继承,20         #则只需要修改引用时的父类名称,不需要每次都修改全部被继承的方法21         self.hungry = True22 23     def eat(self):24         if self.hungry:25             print('Eat it up')26             self.hungry = False27         else:28             print('Full')

注意如果子类Shark()引用父类Fish()时,如果不使用super()函数,则Shark()子类产生的对象时没法调用move()方法的,因为不存在x,y参数

使用super()函数,则可以move(),而且只需要指出父类的方法,不需要self。

如果有多重继承,则只需要修改Shark(Fish)中的Fish名称,不需要修改super()函数内的方法名,super()函数会自动找到父类的方法。

“super函数超级之处在于你不需要明确给出任何基类的名字,它会自动帮你找出所有积累以及对应的方法。由于不用给出基类的名字,这就意味着你如果改变了类继承关系,只要改变class语句里的父类即可,而不必在代码中修改所有被继承的方法”

 

另一个例子:

1 class A(): 2     def __init__(self): 3         print('进入A') 4         print('离开A') 5  6 class B(A): 7     def __init__(self): 8         print('进入B') 9         #A.__init__(self)10         super().__init__()11         print('离开B')12 13 class C(A):14     def __init__(self):15         print('进入C')16         #A.__init__(self)17         #super().__init__()18         print('离开C')19 20 class D(B,C):21     def __init__(self):22         print('进入D')23         #B.__init__(self)24         #C.__init__(self)25         super().__init__()26         print('离开D')27         28

d=D()会出现什么呢?

 

##############################

组合:

1 class Turtle: 2     def __init__(self,x): 3         self.num = x 4  5 class Fish: 6     def __init__(self,x): 7         self.num = x 8  9 class Pool:10     def __init__(self, x, y):11         self.turtle = Turtle(x)12         self.fish = Fish(y)13     def print_num(self):14         print('水池里共有%d只乌龟,%d只鱼'%(self.turtle.num, self.fish.num))15 #这就是组合,把一个类的对象,放到另一个类里引用16 #这不是继承,是组合
View Code

 把没有关系的类进行组合,可以避免继承的一些问题

##############################

mixin:

https://fishc.com.cn/thread-48888-1-1.html

 

转载于:https://www.cnblogs.com/vigossr/p/10194425.html

你可能感兴趣的文章
监听停止滚动
查看>>
RxRetrofit - 终极封装 - 深入浅出 & 扩展 String
查看>>
基于智能家居场景的POALRDB性能体验
查看>>
Cris 的 Scala 笔记整理(九):面向对象高级
查看>>
chrome devtools使用详解——Elements篇
查看>>
mongodb明明认证成功 解决不能关闭的方法
查看>>
面试——谈谈你对Java 面向对象思想的理解
查看>>
在webpack-dev-server内添加mock server
查看>>
关于生成订单号规则的一些思考
查看>>
无人餐厅喜忧参半,要成还得看“暖科技”?
查看>>
盒马鲜生To C,美菜网To B:生鲜独角兽的不同成长之路
查看>>
Qtum智能合约使用方法及说明
查看>>
即时性消费时代来临,美团闪购如何竞合29万亿级市场?
查看>>
iOS 锁
查看>>
java基础:String — 源码分析(一)
查看>>
Python PyCharm编辑器配置和使用
查看>>
adb通信协议分析以及实现(四):adb shell 命令分析
查看>>
在微信小程序里自动获得当前手机所在的经纬度并转换成地址
查看>>
input,select, v-model 绑定的值为数字类型
查看>>
Vuex简单入门
查看>>