2017-07-17 6 views
1

私はこれに対する答えを検索しましたが、私はいくつかの基本的な概念を理解していないと思います。findメソッドでスーパークラスのように動作させる方法

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 

使用例:私はMotifのこのインスタンスを使用して文字列を検索し、任意のマッチを見つけることができるようにしたい

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

私はクラスを持っています。

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

誰かが正しい方向に私を向けることができますか?私は

+2

必要ですクラスの新しいメソッドを定義していますか? –

+0

はい私はいくつかのメソッドを定義しています。 –

答えて

2

__init__のPython 2.7を使用しています

それはコンストラクタではありません、基本的には初期化子です。オブジェクトの構成は__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 
関連する問題