python中类的魔术方法
目的:学习python中class的magic methods,提高编程效率。
环境:ubuntu 16.4 python 3.5.2
在学习class时一定会接触到它的magic methods,比如常用__init__,形式都是前后有双下划线。除了这个必须的,还有其他有用的方法,下面大概的介绍一下。
运算魔术方法:
__add__ 用作 +
__sub__ 用作 -
__mul__ 用作 *
__truediv__用作/
__floordiv__用作//
__mod__用作%
__pow__用作**
__and__用作&
__xor__用作^
__or__用作|
举例说明:
class SpecialString:
def __init__(self, cont):
self.cont = cont
def __truediv__(self, other):
line = '=' * len(other.cont)
return rn.join([self.cont, line, other.cont])
spam = SpecialString('spam')
hello = SpecialString('Helo world!')
print(spam/hello)
# 结果
>>>
spam
============
Hello world!
>>>
x + y 相当于 x.__add__(y), 但是如果x没有__add__方法,且x和y是不同的类,那么就会检查y有没有__radd__,有则表示为y.__radd__(x),没有则出现TypeError,所有的megic methods都有r methods。
比较魔术方法:
__lt__ 用作 <
__le__ 用作 <=
__eq__ 用作 ==
__ne__ 用作 !=
__gt__ 用作 >
__ge__ 用作 >=
如果__ne__不存在,则返回__eq__的方向。
举例说明:
class SpecialString:
def __init__(self, cont):
self.cont = cont
def __gt__(self, other):
for index in range(len(other.cont) + 1):
result = other.cont[:index] + '>' + self.cont
result += '>' + other.cont[index:]
print(result)
spam = SpecialString('spam')
eggs = SpecialString('eggs')
spam > eggs
# result
>>>
>spam>eggs
e>spam>ggs
eg>spam>gs
egg>spam>s
eggs>spam
>>>
类似容器的魔术方法:
__len__用作 len()
__getitem__ 用作进行索引
__setitem__ 用作分配索引
__delitem__ 用作删除索引
__iter__ 用作迭代对象
__contains__用作in
举例说明:
class VagueList:
def __init__(self, cont):
self.cont = cont
def __getitem__(self, index):
return self.cont[index + random.randint(-1, 1)]
def __len__(self):
return random.randint(0, len(self.cont) * 2)
vague_list = VagueList(['A', 'B', 'C', 'D', 'E'])
print(len(vague_list))
print(len(vague_list))
print(vague_list[2])
print(vague_list[2])
#result
>>>
2
2
C
D
>>>
参考文档来源:sololearn
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341