#coding:utf-8
'''
理解类和模块
Python是一种面向对象编程(OOP)语言。这个说法的意思是,Python里边有一种叫做类(class)的结构,通过它可以用一种特殊的方法构造软件。
通过使用类,可以让程序架构更为整齐,使用起来也更加干净 -- 至少理论上应该是这样的。
首先,使用字典来帮助理解模块
比如,定义以下一个字典
mystuff = {'apple': "I AM APPLES!"}
print mystuff['apple']
再来看模块,
1, 模块是包含函数和变量的Python文件
2, 可以导入这个文件
3, 然后可以使用.操作符访问模块中的函数和变量
使用模块实现上述功能:
先定义一个叫做mustuff.py的模块,并且里边放了个叫做apple的函数:
#this goes in mystuff.py
def apple():
print "I AM APPLE!"
接下来就可以用import来调用这个模块,并且访问apple函数
improt mystuff
mystuff.apple()
还可以放一个叫tangerine的变量到模块里边:
def apple():
print "I AM APPLE!"
# this is just a variable
tangerine = "Living reflection of a dream"
同样,还是可以访问这个变量:
import mystuff
mustuff.apple()
print mystuff.tangerine
回到字典的概念,你会发现这个和字典的使用方法有点儿类似,只不过语法不同而已:
mystuff['apple'] #get apple from dict
mystuff.apple() #get apple from the module
mystuff.tangerine #same thing, it's just a variable
也就是说,Python里边由这么一个通用的模式:
1,拿一个类似”键=值“风格的容器:
2,通过“键”的名称可以获取其中的值
对于字典来说,键是一个字符串,获得值得语法是"[键]“。
对于模块来说,键是函数或者变量的名称,而语法是“.键”。除了这个,基本上就没有区别了。
接着,借助模块来理解类
模块还可以用一种方法去理解:可以把他们当做一种特殊的字典,通过他们可以存储一些Python代码,可以通过“.”操作符访问这些代码。
Python还有另外一种代码结构用来实现类似的目的,那就是类,通过类,你可以把一组函数和数据放到一个容器中,从而用“.”操作符访问他们。
如果要创建mystuff模块的方法来创建一个类,那么方法大致是这样:
class Mystuff(object):
def __init__(self):
self.tangrine = "And now a thousand years between"
def apple(self):
print "I AM APPLE!"
难懂的恐怕是__init__()函数,还有就是设置tangerine变量时用了self.tangerine这样的语法。
使用类而非模块的原因如下:
可以拿上面这个类重复创建出很多,哪怕是一次一百万个,他们也互不干涉。
而对于模块来说,一次导入之后,整个程序里就只有这么一份内容,只有鼓捣得很深才能弄出点花样出来。
在弄懂类这个概念之前,需要先理解”对象“(object)是什么东西,以及如何使用MyStuff达到类似mystuff.py模块的结果。
对象相当于迷你导入
如果说类和模拟模块差不多,那么对于类来说,也必然有一个类似导入(import)的概念。
这个概念名称就是“实例化”(instantiate)。这只是一种故作高深的叫法而已,
它的意思就是"创建”。当你将一个类“实例化”以后,就得到了一个对象(object)
实现实例化的方法就是像调用函数一样得调用一个类:
thing = MyStuff()
thing.apple()
print thing.tangerine
第一行代码就是“实例化”操作,这和调用函数很类似。然而,当你进行实例化操作时,Python在背后做了一系列的工作。
1,Python看到了MyStuff()并且知道了他是你定义过的一个类
2,Python创建了一个空对象,里边包含了你在该类中用def创建的所有函数。
3,然后Python回去检查你是不是在里边创建了一个__init__函数,如果有创建,他就会调用这个函数,从而对你新创建的空对象实现了初始化。
4,在MyStuff的__init__函数中,有一个多余的函数叫做self,这就是Python为我们创建的空对象,而我可以它进行类似模块,字典等操作,为它设置一些变量进去。
5,在这里,我把self.tangerine设成了一段歌词,这样我就初始化了该对象。
6,最后Python将这个新建的对象赋给一个叫做thing的变量,以后后面使用。
这就是当你向调用函数一样调用类的时候,Python完成这个“迷你导入”的过程。
记住,这不是拿来一个类就直接用,而是将类当做一个“蓝图”,然后用它创建和这个类有相同属性的副本。
提醒,这样解释和Python的实际原理还是有一点小小出入。事实上,类和对象与模块是完全不同的东西,这样类比只是为了容易理解
1,类就像一种蓝图或者一种预定义的东西,通过它可以创建新的迷你模块。
2,实例化的过程相当于你创建了这么一个迷你模块,而且同时导入了它。
3,结果创建的迷你模块就是一个对象,你可以将它赋予一个变量并进行后续操作。
现在有3种方法可以实现获取内容:
# dict style
mystuff['apple']
# module style
mystuff.apple()
print mystuff.tangerine
# class style
thing = MyStuff()
thing.apple()
print thing.tangerine
'''
class Song(object):
def __init__(self, lyrics):
self.lyrics = lyrics
def sing_me_a_song(self):
for line in self.lyrics:
print line
happy_bday = Song(["Happy birthday to you", "I don't want to get sued", "So I'll stop right there"])
bulls_on_parade = Song(["They rally around the family", "With pockets full of shells"])
happy_bday.sing_me_a_song()
bulls_on_parade.sing_me_a_song()
"""
Test Result:
Happy birthday to you
I don't want to get sued
So I'll stop right there
They rally around the family
With pockets full of shells
"""
【Python】Learn Python the hard way, ex40 模块,类和对象,这个解释比较容易理解
最新推荐文章于 2021-12-30 23:18:17 发布