1. 程式人生 > >python中類的魔術方法

python中類的魔術方法

python class methods

目的:學習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


本文出自 “RickyHuL” 博客,請務必保留此出處http://rickyh.blog.51cto.com/10934856/1952167

python中類的魔術方法