python基础教程之对象和类的实际运用


Posted in Python onAugust 29, 2014

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

调用类的其它信息

上一讲中提到,在定义方法时,必须有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__(): 在建立对象时自动执行

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

Python 相关文章推荐
Python使用QRCode模块生成二维码实例详解
Jun 14 Python
Python实现完整的事务操作示例
Jun 20 Python
酷! 程序员用Python带你玩转冲顶大会
Jan 17 Python
python flask中静态文件的管理方法
Mar 20 Python
Python中list查询及所需时间计算操作示例
Jun 21 Python
tensorflow 加载部分变量的实例讲解
Jul 27 Python
Python 实现中值滤波、均值滤波的方法
Jan 09 Python
python自动保存百度盘资源到百度盘中的实例代码
Aug 26 Python
python线程中的同步问题及解决方法
Aug 29 Python
python计算n的阶乘的方法代码
Oct 25 Python
python ssh 执行shell命令的示例
Sep 29 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
Mar 03 Python
python基础教程之面向对象的一些概念
Aug 29 #Python
初学Python实用技巧两则
Aug 29 #Python
python基础教程之自定义函数介绍
Aug 29 #Python
python爬虫常用的模块分析
Aug 29 #Python
python基础教程之循环介绍
Aug 29 #Python
Python中optionParser模块的使用方法实例教程
Aug 29 #Python
python基础教程之缩进介绍
Aug 29 #Python
You might like
php 数组的指针操作实现代码
2011/02/08 PHP
PHP爆绝对路径方法收集整理
2012/09/17 PHP
深入理解PHP中的Session和Cookie
2013/06/21 PHP
个人写的PHP验证码生成类分享
2014/08/21 PHP
Yii框架登录流程分析
2014/12/03 PHP
常见php数据文件缓存类汇总
2014/12/05 PHP
PHP实现发送邮件的方法(基于简单邮件发送类)
2015/12/17 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
JS 常用校验函数
2009/03/26 Javascript
javascript 页面只自动刷新一次
2009/07/10 Javascript
理解Javascript_06_理解对象的创建过程
2010/10/15 Javascript
基于jQuery的Tab选项框效果代码(插件)
2011/03/01 Javascript
使用Firebug对js进行断点调试的图文方法
2011/04/02 Javascript
JavaScript/jQuery 表单美化插件小结
2012/02/14 Javascript
HTML中的setCapture和releaseCapture使用介绍
2012/03/21 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
jQuery判断多个input file 都不能为空的例子
2015/06/23 Javascript
分析js闭包引起的事件注册问题
2016/03/29 Javascript
原生JS获取元素集合的子元素宽度实例
2016/12/14 Javascript
如何抽象一个Vue公共组件
2017/10/17 Javascript
深入浅析javascript函数中with
2018/10/28 Javascript
jQuery AJAX与jQuery事件的分析讲解
2019/02/18 jQuery
python获取一组数据里最大值max函数用法实例
2015/05/26 Python
python爬虫之验证码篇3-滑动验证码识别技术
2019/04/11 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
2020/02/16 Python
css3的图形3d翻转效果应用示例
2014/04/08 HTML / CSS
英国著名的小众美容品牌网站:Alyaka
2017/08/08 全球购物
美国用餐电影院:Alamo Drafthouse Cinema
2020/01/23 全球购物
双十佳事迹材料
2014/01/29 职场文书
物理系毕业生自荐书范文
2014/02/22 职场文书
物资采购方案
2014/06/12 职场文书
文秘自荐信
2014/06/28 职场文书
小学教师师德师风个人整改措施
2014/09/18 职场文书
乌镇导游词
2015/02/02 职场文书
Python下opencv使用hough变换检测直线与圆
2021/06/18 Python
Java org.w3c.dom.Document 类方法引用报错
2021/08/07 Java/Android