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 相关文章推荐
Python Web框架Pylons中使用MongoDB的例子
Dec 03 Python
在Apache服务器上同时运行多个Django程序的方法
Jul 22 Python
Python实现字符串反转的常用方法分析【4种方法】
Sep 30 Python
python解析html提取数据,并生成word文档实例解析
Jan 22 Python
Python基于辗转相除法求解最大公约数的方法示例
Apr 04 Python
Python获取指定字符前面的所有字符方法
May 02 Python
python切片及sys.argv[]用法详解
May 25 Python
Python中staticmethod和classmethod的作用与区别
Oct 11 Python
django使用haystack调用Elasticsearch实现索引搜索
Jul 24 Python
tensorflow生成多个tfrecord文件实例
Feb 17 Python
aws 通过boto3 python脚本打pach的实现方法
May 10 Python
python爬虫请求头的使用
Dec 01 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的引用原因分析
2012/09/06 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
2015/03/19 PHP
PHP获取数组最大值下标的方法
2015/05/12 PHP
php自定义时间转换函数示例
2016/12/07 PHP
js以对象为索引的关联数组
2010/07/04 Javascript
分析Node.js connect ECONNREFUSED错误
2013/04/09 Javascript
Javascript中Array.prototype.map()详解
2014/10/22 Javascript
jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
2015/12/03 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
JS实现简单拖拽效果
2017/06/21 Javascript
Django使用多数据库的方法
2017/09/06 Javascript
图文介绍Vue父组件向子组件传值
2018/02/17 Javascript
vue监听对象及对象属性问题
2018/08/20 Javascript
解决vue-router在同一个路由下切换,取不到变化的路由参数问题
2018/09/01 Javascript
使用 Node.js 实现图片的动态裁切及算法实例代码详解
2018/09/29 Javascript
LayUi使用switch开关,动态的去控制它是否被启用的方法
2019/09/21 Javascript
浅谈Vue.js之初始化el以及数据的绑定说明
2019/11/14 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
详解vue-router的导航钩子(导航守卫)
2020/11/02 Javascript
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
python生成器generator用法实例分析
2015/06/04 Python
python 获取网页编码方式实现代码
2017/03/11 Python
python3处理含有中文的url方法
2018/05/10 Python
获取python的list中含有重复值的index方法
2018/06/27 Python
python 对给定可迭代集合统计出现频率,并排序的方法
2018/10/18 Python
python实现多进程通信实例分析
2019/09/01 Python
浅谈Python type的使用
2019/11/19 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
简单了解Java Netty Reactor三种线程模型
2020/04/26 Python
Python命名空间及作用域原理实例解析
2020/08/12 Python
python urllib和urllib3知识点总结
2021/02/08 Python
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
面向对象编程OOP的优点
2013/01/22 面试题
军人违纪检讨书
2014/02/04 职场文书
生产车间标语
2014/06/11 职场文书
2019年最新感恩节祝福语(28句)
2019/11/27 职场文书