前言
本文从代码复用的角度一步一步演示如何从python普通代码进化到面向对象,并通过代码去解释一些面向对象的理论。所以,本文前面的内容都是非面向对象的语法实现方式,只有在最结尾才给出了面向对象的简单语法介绍。各位道兄不妨一看,如果留下点笔墨指导,本人感激不尽。
下面话不多说了,来一起看看详细的介绍吧
最初代码
3种动物牛Cow、羊Sheep、马Horse发出的声音各不相同,于是在同一个目录下建立三个模块文件:
$ tree ..|-- cow.py|-- horse.py`-- sheep.py
三个模块文件的内容都只定义了各自的speak()函数:
# cow.pydef speak(): print("a cow goes moooo!")# sheep.pydef speak(): print("a sheep goes baaaah!")# horse.pydef speak(): print("a horse goes neigh!")
然后当前目录下在创建一个程序文件main.py,导入这三个模块文件,分别调用这三种动物的speak()函数,它们将发出不同声音:
# main.pyimport cow,sheep,horsecow.speak()sheep.speak()horse.speak()
让代码更具共性的两种基本方法
上面的cow.py、sheep.py和horse.py中,都是speak()函数,不同的是函数内容,确切地说是函数内容中print()输出的部分不同,它们输出的结构是a 动物名 goes 叫声!。于是为了让代码更具共性,或者说复用性更高,可以将各模块文件中的动物名和叫声都变得通用化。
目前来说,有两种最基本的方式可以让一段代码变得更共性、共通用化:使用参数或变量、使用额外的辅助函数。当然,除此之外还有更多的方法,但目前来说这两种是最基本的,也是最容易理解的。
使用参数(变量)让代码更具共性
首先让动物名变得共性化。可以让speak()中的动物名使用一个参数来替代。例如名为self的参数变量(之所以使用self,是因为在面向对象中它有特殊含义,后文解释),于是修改这三个模块文件:
# cow.pydef speak(self): print("a %s goes moooo!" % (self))# sheep.pydef speak(self): print("a %s goes baaaah!" % (self))# horse.pydef speak(self): print("a %s goes neigh!" %(self))
它们现在在动物名上和参数名上已经完全相同,需要调用它们时,只需在函数调用处为他们传递不同的动物名即可。例如,在main.py中:
import cow,sheep,horsecow.speak("cow")sheep.speak("sheep")horse.speak("horse")
使用辅助函数让代码更具共性
除了参数(变量),还可以定义额外的函数来上面的代码变得更具共性。例如,这三种动物的叫声,可以额外定义一个sound()函数描述它们。于是在前面的基础上继续修改这三个模块文件:
# cow.pydef speak(self): print("a %s goes %s!" % (self,sound()))def sound(): return "moooo"# sheep.pydef speak(self): print("a %s goes %s!" % (self,sound()))def sound(): return "baaaah"# horse.pydef speak(self): print("a %s goes %s!" % (self,sound()))def sound(): return "neigh"
新闻热点
疑难解答