Python类的专用方法实例分析


Posted in Python onJanuary 09, 2015

本文实例讲述了Python类的专用方法。分享给大家供大家参考。具体分析如下:

Python 类可以定义专用方法,专用方法是在特殊情况下或当使用特别语法时由 Python 替你调用的,而不是在代码中直接调用(象普通的方法那样)。

1. __init__

类似于构造函数

#!/usr/local/bin/python

class Study:

        def __init__(self,name=None):

                self.name = name

        def say(self):

                print self.name

study = Study("Badboy")

study.say()

2. __del__

类似于析构函数

#!/usr/local/bin/python

class Study:

        def __init__(self,name=None):

                self.name = name

        def __del__(self):

                print "Iamaway,baby!"

        def say(self):

                print self.name

study = Study("zhuzhengjun")

study.say()

3. __repr__

使用repr(obj)的时候,会自动调用__repr__函数,该函数返回对象字符串表达式,
用于重建对象,如果eval_r(repr(obj))会得到一个对象的拷贝。

#!/usr/local/bin/python

class Study:

        def __init__(self,name=None):

                self.name = name

        def __del__(self):

                print "Iamaway,baby!"

        def say(self):

                print self.name

        def __repr__(self):

                return "Study('jacky')"

study = Study("zhuzhengjun")

study.say()

print type(repr(Study("zhuzhengjun"))) # str

print type(eval_r(repr(Study("zhuzhengjun")))) # instance

study = eval_r(repr(Study("zhuzhengjun")))

study.say()

4. __str__

Python能用print语句输出内建数据类型。有时,程序员希望定义一个类,要求它的对象也能用print语句输出。Python类可定义特殊方法__str__,为类的对象提供一个不正式的字符串表示。如果类的客户程序包含以下语句:

print objectOfClass

那么Python会调用对象的__str__方法,并输出那个方法所返回的字符串。
#!/usr/local/bin/python

class PhoneNumber:

        def __init__(self,number):

                 self.areaCode=number[1:4]

                 self.exchange=number[6:9]

                 self.line=number[10:14]

        def __str__(self):

                return "(%s) %s-%s"%(self.areaCode,self.exchange,self.line)

def test():

         newNumber=raw_input("Enter phone number in the form. (123) 456-7890: \n")

         phone=PhoneNumber(newNumber)

         print "The phone number is:"

         print phone

if__name__=="__main__":

         test()

方法__init__接收一个形如"(xxx) xxx-xxxx"的字符串。字符串中的每个x都是电话号码的一个位数。方法对字符串进行分解,并将电话号码的不同部分作为属性存储。
方法__str__是一个特殊方法,它构造并返回PhoneNumber类的一个对象的字符串表示。解析器一旦遇到如下语句:

print phone

就会执行以下语句:
print phone.__str__()

程序如果将PhoneNumber对象传给内建函数str(如str(phone)),或者为PhoneNumber对象使用字符串格式化运算符%(例如"%s"%phone),Python也会调用__str__方法。
5. __cmp __

比较运算符,0:等于 1:大于 -1:小于

class Study: 

     def __cmp__(self, other): 

         if other > 0 : 

             return 1 

         elif other < 0: 

             return - 1 

         else: 

             return 0 

study = Study() 

if study > -10:print 'ok1' 

if study < -10:print 'ok2' 

if study == 0:print 'ok3'

打印:ok2 ok3

说明:在对类进行比较时,python自动调用__cmp__方法,如-10 < 0 返回 -1,也就是说study 应该小与 -10,估打印ok2

6. __getitem__

__getitem__ 专用方法很简单。象普通的方法 clear,keys 和 values 一样,它只是重定向到字典,返回字典的值。

class Zoo: 

     def __getitem__(self, key): 

         if key == 'dog':return 'dog' 

         elif key == 'pig':return  'pig' 

         elif key == 'wolf':return 'wolf' 

         else:return 'unknown' 

zoo = Zoo() 

print zoo['dog'] 

print zoo['pig'] 

print zoo['wolf']

打印:
dog pig wolf

7. __setitem__

__setitem__ 简单地重定向到真正的字典 self.data ,让它来进行工作。

class Zoo: 

     def __setitem__(self, key, value): 

         print 'key=%s,value=%s' % (key, value) 

zoo = Zoo() 

zoo['a'] = 'a' 

zoo['b'] = 'b' 

zoo['c'] = 'c'

打印:
key=a,value=a
key=b,value=b
key=c,value=c

8. __delitem__

__delitem__ 在调用 del instance[key] 时调用,你可能记得它作为从字典中删除单个元素的方法。当你在类实例中使用 del 时,Python 替你调用 __delitem__ 专用方法。

class A: 

     def __delitem__(self, key): 

         print 'delete item:%s' %key 

a = A() 

del a['key']

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
12步教你理解Python装饰器
Feb 25 Python
Python实现对象转换为xml的方法示例
Jun 08 Python
python中ASCII码字符与int之间的转换方法
Jul 09 Python
pandas 数据归一化以及行删除例程的方法
Nov 10 Python
python 自动重连wifi windows的方法
Dec 18 Python
scrapy-redis源码分析之发送POST请求详解
May 15 Python
从0到1使用python开发一个半自动答题小程序的实现
May 12 Python
基于Python3读写INI配置文件过程解析
Jul 23 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
Nov 05 Python
Python self用法详解
Nov 28 Python
python中lower函数实现方法及用法讲解
Dec 23 Python
python 中的jieba分词库
Nov 23 Python
Python序列之list和tuple常用方法以及注意事项
Jan 09 #Python
Python中的生成器和yield详细介绍
Jan 09 #Python
Python中实现对list做减法操作介绍
Jan 09 #Python
python base64 decode incorrect padding错误解决方法
Jan 08 #Python
Python中字符编码简介、方法及使用建议
Jan 08 #Python
Python实现一个简单的MySQL类
Jan 07 #Python
python实现多线程暴力破解登陆路由器功能代码分享
Jan 04 #Python
You might like
PHP编程获取音频文件时长的方法【基于getid3类】
2017/04/20 PHP
php删除二维数组中的重复值方法
2018/03/12 PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
2019/01/10 PHP
载入进度条 效果
2006/07/08 Javascript
豆瓣网的jquery代码实例
2008/06/15 Javascript
让你的网站可编辑的实现js代码
2009/10/19 Javascript
JavaScript 注册事件代码
2011/01/27 Javascript
简约JS日历控件 实例代码
2013/07/12 Javascript
将中国标准时间转换成标准格式的代码
2014/03/20 Javascript
jQuery中data()方法用法实例
2014/12/27 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
jquery实现标签上移、下移、置顶
2015/04/26 Javascript
jquery实现手机号码选号的方法
2015/07/31 Javascript
RequireJS简易绘图程序开发
2016/10/28 Javascript
Bootstrap源码解读下拉菜单(4)
2016/12/23 Javascript
Vue 拦截器对token过期处理方法
2018/01/23 Javascript
VUE+Element环境搭建与安装的方法步骤
2019/01/24 Javascript
Vue 实现前进刷新后退不刷新的效果
2019/06/14 Javascript
vue Cli 环境删除与重装教程 - 版本文档
2020/09/11 Javascript
python实现从字典中删除元素的方法
2015/05/04 Python
用Python实现KNN分类算法
2017/12/22 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
python bmp转换为jpg 并删除原图的方法
2018/10/25 Python
python图形工具turtle绘制国际象棋棋盘
2019/05/23 Python
对Django 转发和重定向的实例详解
2019/08/06 Python
解决Pytorch训练过程中loss不下降的问题
2020/01/02 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
html5手机键盘弹出收起的处理
2020/01/20 HTML / CSS
西班牙电子产品购物网站:Electronicamente
2018/07/26 全球购物
软件测试笔试题
2012/10/25 面试题
简单叙述一下MYSQL的优化
2016/05/09 面试题
项目管理计划书
2014/01/09 职场文书
争先创优活动总结
2014/08/27 职场文书
置业顾问岗位职责
2015/02/09 职场文书
企业财务管理制度范本
2015/08/04 职场文书
Python+Appium自动化测试的实战
2021/06/30 Python