2017-08-14 1 views
1

クラスを実装したいと思います。組み込みのクラスリストから継承し、メソッドをオーバーライドします。このクラスのインスタンスを取得すると、カスタムデータを返すことができますか?リストをオーバーライドする方法Pythonでオブジェクトを取得

class MyList(list): 
    def the_method(self): 
     # do some thing 
     return [1, 2] 

inst = MyList() 
print inst # [1, 2] 

通常のpythonのことをどのように行う、私はクラスのインスタンスを印刷するとき、私は「0x0000000002D92358でxxxはオブジェクト」、 を取得しますが、私はリストから継承したクラスのインスタンスを印刷する場合、私はリストの出力が得られます?

+3

list'sは '__repr__'と' __str__'方法を持っている '、その出力は、あなたが見るものです。 –

答えて

1

あなたはを教えてくださいあなたのクラスを文字列に変換する方法を教えてください。

Pythonの基本オブジェクトには、__repr____str__という文字列への変換を処理する2つのメソッドがあります。あなたが望む結果を得るには、それらを無効にする必要があります。

これらの2つの機能は、類似してはいますが同一目的ではありません。あなたはそれらの間の正確な違いがhereであることを知ることができます。 Ned Batchelderによって与えられた素敵な説明は次のとおりです。

親指の私のルール:__repr____str__が顧客のためで、開発者のためのものです。

しかし、あなたはそれらを異ならせる必要はありません。カスタムリストクラスの曖昧さのない表現も最も読み易いので、2つの関数は同じ結果を返すことができます。両方の機能が__repr__のreturn文でstrに、したがってコール文字列を返す必要があること

class MyList(list): 
    def __repr__(self): 
     return str([1,2]) 
    def __str__(self): 
     return self.__repr__() 

注:

はそうのようなあなたのクラスを変更します。

+0

しかし、変数mylist(mylist = MyList())にアクセスしようとすると、カスタムリスト(データベースからのrealt-ime)を取得したいのですが、それはできますか? – nopa

+0

@nopaあなたは文字列表現の取得について尋ねました。あなたが今質問していることは完全に無関係です。あなたはこの質問への回答を受け入れ、新しい問題を明確に説明して新しい質問をする必要があります。それから、必要な知識を持っている人があなたを助けます。 – stybl

+0

多分私は本当に必要なデザインを確認していないかもしれません。返信ありがとうございます – nopa

0

__repr __(自己)メソッドをオーバーライドすると、オブジェクトの表現を変更できます。しかしそれはstrタイプを返す必要があります。 __repr____str__の違いについて

>>> class MyList(list): 
    def do(self): 
     return [1, 2] 
    def __repr__(self): 
     return '[1, 2]' 


>>> inst = MyList() 
>>> inst 
[1, 2] 

、偉大な説明がここにありますhttps://stackoverflow.com/a/2626364/840582

+0

しかし、私は変数mylist(mylist = MyList()に到達しようとするとカスタムリスト(データベースからrealt-ime) )、私はそれをすることはできますか? – nopa

+0

あなたはリストオブジェクトでクラスを定義し、それを拡張する必要はありません – Vinny