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 相关文章推荐
动态创建类实例代码
Oct 07 Python
浅析Python基础-流程控制
Mar 18 Python
python模拟事件触发机制详解
Jan 19 Python
python使用sqlite3时游标使用方法
Mar 13 Python
浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)
Apr 27 Python
浅析python参数的知识点
Dec 10 Python
python实现Flappy Bird源码
Dec 24 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
Jul 09 Python
Python替换NumPy数组中大于某个值的所有元素实例
Jun 08 Python
Python 删除List元素的三种方法remove、pop、del
Nov 16 Python
五种Python转义表示法
Nov 27 Python
Python页面加载的等待方式总结
Feb 28 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
这部番真是良心,画质好到像风景区,剧情让人跟着小公会热血沸腾
2020/03/10 日漫
简单的页面缓冲技术
2006/10/09 PHP
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
2007/03/29 PHP
PHP日期时间函数的高级应用技巧
2009/05/16 PHP
浅析php中如何在有限的内存中读取大文件
2013/07/02 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
2016/07/20 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
PHP用户管理中常用接口调用实例及解析(含源码)
2017/03/09 PHP
基于jQuery的message插件实现右下角弹出消息框
2011/01/11 Javascript
JavaScript 参数中的数组展开 [译]
2012/09/21 Javascript
多个$(document).ready()的执行顺序实例分析
2014/07/26 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
浅谈jquery中使用canvas的问题
2016/10/10 Javascript
Javascript 高性能之递归,迭代,查表法详解及实例
2017/01/08 Javascript
微信小程序日期时间选择器使用方法
2018/02/01 Javascript
详解vue-cli 构建项目 vue-cli请求后台接口 vue-cli使用axios、sass、swiper
2018/05/28 Javascript
Node.js+ELK日志规范的实现
2019/05/23 Javascript
VUE安装使用教程详解
2019/06/03 Javascript
JS去除字符串最后的逗号实例分析【四种方法】
2019/06/20 Javascript
mpvue 页面预加载新增preLoad生命周期的两种方式
2019/10/17 Javascript
微信小程序canvas开发水果老虎机的思路详解
2020/02/07 Javascript
Python实现嵌套列表及字典并按某一元素去重复功能示例
2017/11/30 Python
Python关于反射的实例代码分享
2020/02/20 Python
在pycharm中关掉ipython console/PyDev操作
2020/06/09 Python
python 解决selenium 中的 .clear()方法失效问题
2020/09/01 Python
LTD Commodities:礼品,独特发现,家居装饰,家用器皿
2017/08/11 全球购物
幼儿园长自我鉴定
2013/10/17 职场文书
土木工程毕业生推荐信
2013/10/28 职场文书
生产部主管岗位职责
2014/01/06 职场文书
致跳远运动员广播稿
2014/02/11 职场文书
出纳担保书范文
2014/04/02 职场文书
团日活动总结报告
2014/06/25 职场文书
讲座新闻稿
2015/07/18 职场文书
2015年评职称个人工作总结
2015/10/15 职场文书
2016国庆节67周年红领巾广播稿
2015/12/18 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书