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实现压缩与解压gzip大文件的方法
Sep 18 Python
python好玩的项目—色情图片识别代码分享
Nov 07 Python
高质量Python代码编写的5个优化技巧
Nov 16 Python
python range()函数取反序遍历sequence的方法
Jun 25 Python
详解分布式任务队列Celery使用说明
Nov 29 Python
python 求1-100之间的奇数或者偶数之和的实例
Jun 11 Python
Python Django 添加首页尾页上一页下一页代码实例
Aug 21 Python
Python通过VGG16模型实现图像风格转换操作详解
Jan 16 Python
Python延迟绑定问题原理及解决方案
Aug 04 Python
python Paramiko使用示例
Sep 21 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
Sep 24 Python
python中的时区问题
Jan 14 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
第三节--定义一个类
2006/11/16 PHP
php+ajax实现的点击浏览量加1
2015/04/16 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
2016/06/12 PHP
PHP开发制作一个简单的活动日程表Calendar
2016/06/20 PHP
js可突破windows弹退效果代码
2008/08/09 Javascript
表格 隔行换色升级版
2009/11/07 Javascript
jquery判断浏览器类型的代码
2012/11/05 Javascript
jquery设置控件位置的方法
2013/08/21 Javascript
JS数组去重与取重的示例代码
2014/01/24 Javascript
利用javascript实现全部删或清空所选的操作
2014/05/27 Javascript
jQuery实现的Div窗口震动特效
2014/06/09 Javascript
常用DOM整理
2015/06/16 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
2016/06/01 Javascript
详解Vuejs2.0之异步跨域请求
2017/04/20 Javascript
详解JavaScript中的六种错误类型
2017/09/21 Javascript
React 组件中的 bind(this)示例代码
2018/09/16 Javascript
vue和iview实现Scroll 数据无限滚动功能
2019/10/31 Javascript
开源软件包和环境管理系统Anaconda的安装使用
2017/09/04 Python
mac下如何将python2.7改为python3
2018/07/13 Python
Django如何防止定时任务并发浅析
2019/05/14 Python
解决python多行注释引发缩进错误的问题
2019/08/23 Python
Python实现滑动平均(Moving Average)的例子
2019/08/24 Python
Python 读取有公式cell的结果内容实例方法
2020/02/17 Python
Python实现分数序列求和
2020/02/25 Python
Python通过4种方式实现进程数据通信
2020/03/12 Python
你不知道的5个HTML5新功能
2016/06/28 HTML / CSS
纽约通行卡:The New York Pass(免费游览纽约90多个景点)
2017/07/29 全球购物
匡威德国官网:Converse德国
2019/01/26 全球购物
澳大利亚有机化妆品网上商店:The Well Store
2020/02/20 全球购物
怎样声明一个匿名的内部类
2016/06/01 面试题
安全生产月演讲稿
2014/05/09 职场文书
工程负责人任命书
2014/06/06 职场文书
汽车运用工程专业求职信
2014/06/18 职场文书
2016年学校综治宣传月活动总结
2016/03/16 职场文书
Redis Stream类型的使用详解
2021/11/11 Redis
最新动漫情报:2022年7月新番定档超过30部, OVERLORD骨王第四季也在其中噢
2022/05/04 日漫