估计是我问题没有描述清楚,这样吧,直接上代码:
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”
Vous utilisez la méthode « agrégation » pour créer vos propres données de cluster. À l'heure actuelle, la délégation est une méthode simple :
__str__
est une méthode spéciale dans la classe Python. Sa valeur de retour est la valeur obtenue en utilisantstr(x)
, etprint(x)
est en fait égale àprint(str(x))
. En fait, pour être plus détaillé, lorsque nous appelonsstr(x)
, nous appelons en faitx.__str__()
.En d’autres termes, on peut l’imaginer ainsi :
Généralement, pour notre classe personnalisée, la valeur de retour de la méthode
__str__
est la chaîne par défaut, par exemple :<__main__.Mylist object at 0x0071A470>
est utilisé pour décrire l'espace de noms, le nom de la classe et l'emplacement. Si nous voulons modifier la valeur de retour de__str__
, nous devons l'écraser.Ici, nous laissons la valeur de retour de
__str__
être la valeurMyList
de la liste agrégée dans la classe__str__
, de sorte que la sortie de__str__
soit la même que la liste par délégation.Je voudrais ajouter que ce genre de méthode (communément appelée méthode magique ou méthode spéciale) qui commence par un double trait de soulignement et se termine par un double trait de soulignement dans une classe a un nom officiel appelé Méthode "dunder", pour
__str__
, on peut le prononcer comme "dunder string".Je répondrai aux questions posées dans les commentaires ci-dessous.
Tout d'abord, ne soyez pas confus. Le contenu imprimé que nous utilisons
print
est entièrement chaîne Même si vous voyez[1, 2]
, c'est en fait une chaîne'[1, 2]'
, mais c'est le cas. est intégré Plusieurs types de données (ou classes que nous avons remplacés__str__
) trouveront un moyen de générer une chaîne avec les caractéristiques du type de données (généralement très proche du "littéral" que nous utilisons lors de la génération de ces données) .Par exemple, nous utilisons des littéraux pour générer une liste :
Lorsque nous imprimons
lst
, Python créera une chaîne qui ressemble au type de données littéral (ou même exactement le même) que vous pourrez imprimer.Donc ici
str(list)
ne change pas le type des éléments de la liste, mais utilise uniquement la "string" avec ses caractéristiques comme valeur de retour.Deuxièmement, si vous souhaitez afficher la chaîne représentant
Mylist
en utilisant uniquement le nom de la variable dans le shell Python (l'interface interactive de Python),__str__
seul ne suffit pas, vous devez remplacer__repr__
:Résultat :
Implémentez la fonction __str__ dans la classe et écrivez le contenu que vous souhaitez afficher
Par exemple
La fonction print appellera la méthode __str__ de l'objet. Si vous n'avez pas réimplémenté la méthode __str__ vous-même, la méthode __str__ héritée de la classe parent sera utilisée par défaut, donc la sortie n'est pas nécessairement sous la forme d'une liste.