再学python类(终结篇) 初学python类
续写 初学python类,这几天吃坏东西了,拖着虚弱的身躯写的。有些乱请各位看官海涵。 声明:本人编程新手,还在学习中。所表述的东西都是基础语法之类的,分享我的学习笔记。还望多多指点,我一定虚心接受。 python中类的继承,基本就是一句带过(貌似默认学过其他语言),我的学习过程是参考《笨方法学python》——手头就这本书。好了话不多说直入主题: 我主要说的是:类的继承和合成,后面有一个小习题和Zed A.Shaw给出的编码风格建议 python中的继承分为三种:1.隐式继承,2.显示覆盖,3.运用super() 1.隐式继承——当你不需要重写父类中的方法或者属性的时候就用这个。就是不修改任何父类中的东西,就叫做‘隐式继承’。 class Parent(object): def implicit(self): print "PARENT implicit()" Child(Parent): #这里就是表示什么都没有做,但是不写pass报错, #不懂可以看我的博文‘python关键字’中pass的解释 pass dad = Parent() son = Child() dad.implicit() son.implicit() 运行结果: PARENT implicit()
PARENT implicit()
? 2.显示覆盖——如果你需要修改父类中的属性或者函数的话。就要用到‘显示覆盖’。 override(self): PARENT override()" Child(Parent): def override(self): 显示覆盖——子类的方法覆盖了父类的方法 CHILD override()" dad = Child() dad.override() son.override() 运行结果: PARENT override()
CHILD override()
? 3.在你想替换的地方替换(使用super方法) 第三种方法是一个覆盖的特例,你想在父类中定义的内容运行之前 或之后再修改行为。 altered(self): PARENT altered()" CHILD,BEFORE PARENT altered() super(Child,self).altered() 调用super()方法 Child() dad.altered() son.altered() 运行结果: PARENT altered()
CHILD,BEFORE PARENT altered()
PARENT altered()
CHILD,AFTER PARENT altered()
? python中类的合成: ? Other(object): OTHER override()" OTHER implicit()OTHER altered() Child(object): def __init__(self): self.other = Other() 主要理解这里——类的合成 implicit(self): self.other.implicit() self.other.altered() son = Child() son.implicit() son.override() son.altered() ? 运行结果: OTHER implicit()
CHILD override()
CHILD,BEFORE OTHER altered()
OTHER altered()
CHILD,AFTER OTHER altered()
笔记: 继承与合成就是为了解决关于代码复用的问题 习题——写一个游戏 下面是我写的游戏,当成v1.0吧,后面还会在修改的。。。。 你可以先看完我写的,再去写。你就有信心了——我这么渣的都可以叫做‘游戏’,你肯定能写出来比我更好的!(当然如果你喜欢的话,你也可以写这个游戏的2.0版本)哈哈 ? coding:utf-8################ 习题45:你来制作一个游戏 前言 # 我想要制作一个游戏,题材是西游记,唐僧救出孙悟空的故事:唐僧来到了五指山下,发现孙悟空被压着。他想要救出孙悟空,并说服他和自己去西天取经。但是救出孙悟空困难重重:1.爬到五指山的山顶2.给山顶的bos念经,直到它睡着3.撕掉山顶的封印,一口气跑到山底——不能背bos吃掉4.给孙悟空带上紧箍咒5.gameover Scene(object): status = '' 标记当前位置 def input(self): 输入 say = raw_input('more-> ') print say return say def enter(self): enter()用于显示当前的位置 -'*5 你现在的位置是:,self.status '*5 DownHill(Scene): status = 山脚' def __init__(self): #在初始化里写输出位置会输出两次——参照 笔记:类2 self.enter() #继承父类的enter()方法 talk(self): super(DownHill,self).enter() 山脚下有一个人被山压住了。' 你过去和他交谈:你说:施主你是何人为何被压在五指山下? self.input() """孙悟空说:我是孙悟空,我因为违反天条被如来佛祖压在这五指山下,n整整五百年,高僧请你救救我!"""你说:我应该怎么办呢?孙悟空说:你要到五指山的山顶,打败山顶的bos。撕掉符文',我就可以n脱身了。带我脱身之后我必报答高僧。救人一命胜造七级浮屠,阿弥陀佛!施主等待片刻便是。#你起身去,便奔向五指山顶了。return hill' Hill(Scene): status = 山上' talk(self): super(Hill,self).enter() for x in range(0,10): 爬山中,看不到尽头! self.input() #突然天降一道神域:唐三藏,我看你诚心救人,故放你上去,但生死有命。下面的路。。top TopHill(Scene): status = 山顶' def bit(self): 如何度化BOS while self.input() != '': 你在度化bos' 你成功地度化了BOS。" talk(self): super(TopHill,self).enter() super父类的enter()方法 #突然蹦出一个只长相凶恶的BOSbos:我要吃了你!#是时候给他讲道理了。 self.bit() 调用类中的bit()方法 #BOS,带你来到了封印处。你撕下来封印Bos,突然发狂,向你扑来。请做出选择:1.重新度化它nt2.掉头就跑if self.input() == 1你被吃掉了,Game Over! exit(1) else你在疯狂的往山下跑。' return' ReturnDownHill(DownHill): talk(self): super(ReturnDownHill,1)">你气喘嘘嘘的跑了下来,但是bos还紧追你的身后。这个时候孙悟空出现了,一棒子打死了凶恶的BOS.0......经过很多对话孙悟空带上了金箍,保护唐僧西天取经去了 exit(1) Map(object): scenes = { down: DownHill(),: Hill(),1)">: TopHill(),1)">: ReturnDownHill() } (self,start_scene): self.start_scene = start_scene next_scene(self,scene_name): Map.scenes.get(scene_name) opening_scene(self): self.next_scene(self.start_scene) Engine(object): scene_map play(self): current_scene = self.scene_map.opening_scene() while True: next_scene_name = current_scene.talk() current_scene = self.scene_map.next_scene(next_scene_name) a_map = Map() a_game = Engine(a_map) a_game.play() ? ? 最后,Zed A.Shaw 给出的建议: # 重复的看这里写的代码,主要是Engine和Map ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |