码迷,mamicode.com
首页 > 编程语言 > 详细

Python基础教程09:面向对象的进一步拓展

时间:2016-04-19 11:59:24      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

怎么能快速地掌握Python?这是和朋友闲聊时谈起的问题。

Python包含的内容很多,加上各种标准库、拓展库,乱花渐欲迷人眼。我一直希望写一个快速的、容易上手的Python教程,而且言语简洁,循序渐进,让没有背景的读者也可以从基础开始学习。我将在每一篇中专注于一个小的概念,希望在闲暇时可以很快读完。

小提醒

  • 教程将专注于Python基础,语法基于Python 2.7 (我会提醒Python 3.x中有变化的地方,以方便读者适应3.X的情况)。测试环境为Linux。标准库的一些包不适用于Windows平台。如果文中的程序无法在你的平台上运行,欢迎讨论。
  • 我将专注于Python的主干,以便读者能以最快时间对Python形成概念。
  • Linux命令行将以$开始,比如 $ls, $python
  • Python命令行将以>>>开始,比如 >>>print ‘Hello World!‘
  • 注释会以#开始

建议

  • 将教程中的命令敲到Python中看看效果。
  • 看过教程之后,可以进行一些练习。
  • 参与文章评论区的讨论,可以更好的积累经验。

教程内容

我们熟悉了对象和类的基本概念。我们将进一步拓展,以便能实际运用对象和类。

调用类的其它信息

在定义方法时,必须有self这一参数。这个参数表示某个对象。对象拥有类的所有性质,那么我们可以通过self,调用类属性。

class Human(object):

    laugh = ‘hahahaha‘

    def show_laugh(self):

        print self.laugh

    def laugh_100th(self):

        for i in range(100):

            self.show_laugh()

li_lei = Human()          

li_lei.laugh_100th() 

这里有一个类属性laugh。在方法show_laugh()中,通过self.laugh,调用了该属性的值。

还可以用相同的方式调用其它方法。方法show_laugh(),在方法laugh_100th中()被调用。

通过对象可以修改类属性值。但这是危险的。类属性被所有同一类及其子类的对象共享。类属性值的改变会影响所有的对象。

__init__()方法

__init__()是一个特殊方法(special method)。Python有一些特殊方法。Python会特殊的对待它们。特殊方法的特点是名字前后有两个下划线。

如果你在类中定义了__init__()这个方法,创建对象时,Python会自动调用这个方法。这个过程也叫初始化。

class happyBird(Bird):

    def __init__(self,more_words):

        print ‘We are happy birds.‘,more_words

summer = happyBird(‘Happy,Happy!‘)

这里继承了Bird类,它的定义见上一讲。

屏幕上打印:

We are happy birds.Happy,Happy!

我们看到,尽管我们只是创建了summer对象,但__init__()方法被自动调用了。最后一行的语句(summer = happyBird...)先创建了对象,然后执行:

summer.__init__(more_words)

‘Happy,Happy!‘ 被传递给了__init__()的参数more_words

对象的性质

我们讲到了许多属性,但这些属性是类的属性。所有属于该类的对象会共享这些属性。比如说,鸟都有羽毛,鸡都不会飞。

在一些情况下,我们定义对象的性质,用于记录该对象的特别信息。比如说,人这个类。性别是某个人的一个性质,不是所有的人类都是男,或者都是女。这个性质的值随着对象的不同而不同。李雷是人类的一个对象,性别是男;韩美美也是人类的一个对象,性别是女。

当定义类的方法时,必须要传递一个self的参数。这个参数指代的就是类的一个对象。我们可以通过操纵self,来修改某个对象的性质。比如用类来新建一个对象,即下面例子中的li_lei, 那么li_lei就被self表示。我们通过赋值给self.attribute,给li_lei这一对象增加一些性质,比如说性别的男女。self会传递给各个方法。在方法内部,可以通过引用self.attribute,查询或修改对象的性质。

这样,在类属性的之外,又给每个对象增添了各自特色的性质,从而能描述多样的世界。

class Human(object):

    def __init__(self, input_gender):

        self.gender = input_gender

    def printGender(self):

        print self.gender

li_lei = Human(‘male‘) # 这里,‘male‘作为参数传递给__init__()方法的input_gender变量。

print li_lei.gender

li_lei.printGender()

在初始化中,将参数input_gender,赋值给对象的性质,即self.gender。

li_lei拥有了对象性质gender。gender不是一个类属性。Python在建立了li_lei这一对象之后,使用li_lei.gender这一对象性质,专门储存属于对象li_lei的特有信息。

对象的性质也可以被其它方法调用,调用方法与类属性的调用相似,正如在printGender()方法中的调用。

总结

通过self调用类属性

__init__(): 在建立对象时自动执行

类属性和对象的性质的区别

http://www.biyinjishi.com/products/a65-b6535/
http://www.biyinjishi.com/products/a65-b6550/
http://www.biyinjishi.com/products/a65-b6560/
http://www.biyinjishi.com/products/a65-b6570/
http://www.biyinjishi.com/products/a65-b6580/
http://www.biyinjishi.com/products/a65-b6599/

Python基础教程09:面向对象的进一步拓展

标签:

原文地址:http://www.cnblogs.com/SA-Jim/p/5407426.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!