2017-07-17 47 views
1

我已經搜索了周圍的答案,我懷疑我不理解一些基本概念。如何使類在查找方法中像超級行爲

我有一個類:

class Motif(str): 
    def __init__(self, s): 
     str.__init__(self, s) 
     self.motif = s.upper() 

    def __repr__(self): 
     return self.motif 

    def __str__(self): 
     return self.motif 

用法示例:

>>> m = Motif("gtca") 
>>> print m 
GTCA 

我希望能夠通過使用Motif這種情況下要搜索的字符串,找到任何匹配。

>>> s = 'GTAGGCTGAGTCATTHAGTCAT' 
>>> s.find(m) 
9 

就是有人能指出我在這裏向正確的方向?

我使用Python 2.7

+2

是成爲一個單獨的類,例如,它需要你在課堂上定義任何新的方法嗎? –

+0

是的,我有一些爲它定義的方法。 –

回答

2

__init__基本上是一個初始化,這不是一個構造函數。對象構造發生在__new__方法中。因此,如果你想存儲傳遞的字符串的大寫版本,你應該覆蓋__new__

class Motif(str): 
    def __new__(cls, s): 
     return super(Motif, cls).__new__(cls, s.upper()) 

演示:

>>> m = Motif("gtca") 
>>> m 
'GTCA' 
>>> s = 'GTAGGCTGAGTCATTHAGTCAT' 
>>> s.find(m) 
9 
相關問題