估计是我问题没有描述清楚,这样吧,直接上代码:
class Mylist:
def __init__(self):
self._mylist=list()
def __len__(self):
return len(self._mylist)
def add(self,value):
return self._mylist.append(value)
我自己模仿list的行为。写了一个基本的list,名字叫Mylist,并给他一个add方法用来添加其中的元素,添加完之后,我想输出其中的内容,然后我使用:
list1=Mylist()
list1.add(1)
list1.add(2)
print(list1)
我以为print会显示出list1中的每一项,但是发现实际没有,显示的为:
<__main__.Mylist object at 0x0071A470>
怎么样能让print(list1)显示出的结果和真实list类型一样呢?例如:
[1,2]
__str__具体怎么实现,貌似这个只能为str类型,int不行,而且我发现在pycharm 里面写的时候,提示__str__方法“overrides method in object”
現時点では、「集約」メソッドを使用して独自のクラスター データを作成しています。
現時点では、委任は単純なメソッドです。 リーリー__str__
は Python クラスの特別なメソッドであり、その戻り値はstr(x)
を使用して取得された値であり、print(x)
は実際にはprint(str(x))
と同じです。実際、より詳しく言うと、str(x)
を呼び出すとき、実際にはx.__str__()
を呼び出します。言い換えると、次のように想像できます:
一般に、カスタマイズされたクラスの場合、
__str__
メソッドの戻り値はデフォルトの文字列です。たとえば、<__main__.Mylist object at 0x0071A470>
は、名前空間、クラス名、および場所を記述するために使用されます。__str__
の戻り値を変更したい場合は、それを上書きする必要があります。ここでは、
__str__
の戻り値をMyList
クラスに集約されたリストの__str__
値にすることで、__str__
の出力が委任によるリストと同じになるようにします。クラス 内の二重下線で始まり二重下線 で終わるこの種のメソッド (一般にマジック メソッドまたは特殊メソッドと呼ばれる) は、 という正式名があることを付け加えておきます。 🎜> "dunder" メソッド"、
__str__
については、「ダンダー ストリング」と発音できます。以下のコメントでいただいたご質問にお答えします。
まず、混乱しないでください。
たとえば、リテラルを使用してリストを生成します。print
で使用する印刷コンテンツはすべて 文字列 ですが、実際には[1, 2]
です。は組み込みです。 いくつかのデータ型 (または'[1, 2]'
をオーバーライドしたクラス) は、データ型の特性を持つ文字列を出力する方法を見つけます (通常、これらのデータを生成するときに使用する「リテラル」に非常に近い) .__str__
リーリー
を出力すると、Python はデータ型リテラルに似た (またはまったく同じ) 文字列を作成して出力します。
したがって、ここでlst
リーリーはリスト内の要素の型を変更せず、その特性を持つ「文字列」を戻り値として使用するだけです。
次に、Python シェル (Python の対話型インターフェイス) で変数名のみを使用してstr(list)
を表す文字列を表示したい場合は、
Mylist
だけでは十分ではなく、__str__
:__repr__
をオーバーライドする必要があります。 リーリー結果: リーリー
リーリー
クラスに__str__関数を実装し、出力したい内容を記述します
リーリー例えば
print 関数はオブジェクトの __str__ メソッドを呼び出します。__str__ メソッドを自分で再実装していない場合は、親クラスから継承された __str__ メソッドがデフォルトで使用されるため、出力は必ずしも次の形式になるわけではありません。リストの。
リーリー