首页 > 编程语言 > 详细

Python 魔术方法.

时间:2017-05-20 14:52:29      阅读:289      评论:0      收藏:0      [点我收藏+]
‘123‘ + ‘456‘
‘123‘.__add__.‘456‘

  Python 中,这两个语句是等价的。具体的说,第二句是第一句的具体实现。当处理‘+’的时候,Python 会去‘+’号的左侧的object寻找是否有__add__的魔术方法。如果这个object有__add__的具体实现, 那么这个object就支持加法的操作。 ‘123’是字符串,也是str类型的object,那么我们推测它肯定有__add__方法:

>>> type(‘123‘)
<type ‘str‘>
>>> dir(‘123‘)
[‘__add__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘_

  个人感觉Python的魔术方法是一种比较漂亮的方法,如果想要支持某种内置的操作,只要去实现对应的方法即可。

 

很显然,下面的代码会报错。

class MyObject(object):
    def __init__(self, name):
        self.name = name

my_object1 = MyObject(‘Hello‘)
my_object2 = MyObject(‘World‘)
my_object1 + my_object2

  Output:

    my_object1 + my_object2
TypeError: unsupported operand type(s) for +: ‘MyObject‘ and ‘MyObject‘

 实现了__add__魔术方法之后呢?

class MyObject(object):
    def __init__(self, name):
        self.name = name
    def __add__(self, other):
        return self.name + other.name
my_object1 = MyObject(Hello)
my_object2 = MyObject(World)
print(my_object1 + my_object2)

Output:

HelloWorld

Python tutor

如果一个object是class, 那么使用dir(object) 命令,就能发现它有__class__的method。

如果一个object支持str(object)的操作,那么它就有具体__str__的实现。

如果一个object支持len(object)的操作,那么它就有具体__str__的实现。

 

Python 魔术方法.

原文:http://www.cnblogs.com/mypythonic/p/6882122.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!