【Python】Learn Python the hard way, ex40 模块,类和对象,这个解释比较容易理解

#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

"""

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《学习Python的硬道理》是一本非常受欢迎的Python编程学习教程。它是由Zed Shaw编写的,以实践为基础的学习方法,具有适合初学者的特点。 这本教程通过一系列的练习和示例,帮助读者逐步掌握Python编程的基础知识和技能。它强调通过不断实践和写代码来学习,而不只是被动地阅读理论知识。实践的困难会迫使学习者主动思考和解决问题,这也是为什么它被称为"学习Python的硬道理"。 该教程提供了一些实用的技巧和建议,帮助初学者更好地理解和掌握Python编程。通过逐步实现一些小项目和练习题,读者可以逐渐提升自己的编程能力。 与其他教程相比,这本教程更倾向于通过实践学习,并鼓励读者多写代码和尝试不同的方法。这样的学习方式对于编程入门者来说非常有益,因为它使他们能够更深入地理解编程的核心思想和概念。 总而言之,《学习Python的硬道理》是一本很好的Python编程学习教程,特别适合初学者。通过它,读者可以获得坚实的编程基础,并能够在实践不断提升自己的技能。 ### 回答2: 《Learn Python the Hard Way(笨办法学Python)》是一本广受欢迎的Python编程入门书籍,主要通过实践和练习来帮助读者掌握Python编程语言。 这本书的PDF版本非常受欢迎,因为它提供了免费的学习资源,可以随时随地进行学习。通过下载这个PDF文件,读者可以在没有网络连接的情况下进行学习,并且可以根据自己的进度学习。 《Learn Python the Hard Way》这本书的特点是以实践为重,通过编写和运行代码来学习Python编程。它提供了大量的练习题和习题答案,帮助读者巩固所学的知识,并培养解决问题的能力。 这本书适合初学者学习Python编程,无论是有编程经验还是没有编程经验的读者都可以从受益。它从基础知识开始,逐步介绍了Python的各个方面,包括变量、函数、循环、条件语句等等。通过实践和编程练习,读者可以逐渐掌握Python的编程技巧和应用。 总之,学习Python的最佳途径是通过实践来掌握。《Learn Python the Hard Way》的PDF版本提供了免费的学习资源,可供读者随时随地进行学习。通过实践和编程练习,读者可以快速掌握Python编程的基础知识和技巧。这本书尤其适合初学者,无论有无编程经验,都可以通过学习它来迅速入门Python编程。 ### 回答3: "Learn Python the Hard Way"是一本非常受欢迎的Python编程入门书籍,由Zed A. Shaw撰写。该书旨在帮助初学者通过实际的编程练习来学习Python语言。 这本书的一个主要特点是通过一系列的编程练习来进行学习,每个练习都有详细的说明和示范代码。学生需要阅读相关材料,并按照书的指导进行代码编写和测试。通过这种刻意练习的方法,学生可以逐步适应并掌握Python的语法、逻辑和编程思维。 "Learn Python the Hard Way"强调了编程的实践重要性,鼓励学生不断尝试、理解和解决问题。通过完成一些较为复杂的编程练习,学生可以逐步提高他们的编程能力和解决问题的技巧。 该书所提供的练习和教学方法不仅适合初学者,也适用于那些希望通过实践来巩固他们的Python知识的级学习者。 总的来说,"Learn Python the Hard Way"是一本适合通过实践来学习Python编程的入门教材。它通过一系列的编程练习帮助学生逐步掌握Python的基础知识和编程技巧,是一本非常实用和受欢迎的Python学习资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值