Maison  >  Article  >  développement back-end  >  Quelle est la différence entre __str__ et __repr__

Quelle est la différence entre __str__ et __repr__

anonymity
anonymityoriginal
2019-05-24 15:41:575307parcourir

La différence entre __str__ et repr__ est : __str__ renverra un affichage convivial, tandis que __repr__ doit reconstruire la méthode puis afficher __repr__ en bas. __str__ remplace __repr__ pour un affichage plus convivial.

Quelle est la différence entre __str__ et __repr__

La différence entre __repr__ et __str__ (explication)

__repr__ et __str__ Les méthodes sont toutes destinées à l'affichage, __str__ est destiné aux utilisateurs et __repr__ est destiné aux programmeurs.

Les opérations d'impression essaieront d'abord les fonctions intégrées __str__ et str (l'équivalent interne de l'opération d'impression), qui devraient généralement renvoyer un affichage convivial.

__repr__ est utilisé dans tous les autres environnements : utilisé pour les réponses rapides en mode interactif et la fonction repr Si __str__ n'est pas utilisé, print et str seront utilisés. Il doit généralement renvoyer une chaîne codée qui peut être utilisée pour recréer l'objet ou afficher les détails au développeur.

Lorsque nous voulons afficher uniformément dans tous les environnements, nous pouvons refactoriser la méthode __repr__ ; lorsque nous voulons prendre en charge différents affichages dans différents environnements, par exemple, les utilisateurs finaux utilisent __str__ pour l'affichage et les programmeurs développent pendant le point final, le __repr__ sous-jacent est utilisé pour l'affichage. En fait, __str__ remplace simplement __repr__ pour obtenir un affichage plus convivial.

class Test(object):
    def __init__(self, value='hello, world!'):
        self.data = value
>>> t = Test()
>>> t
<__main__.Test at 0x7fa91c307190>
>>> print t
<__main__.Test object at 0x7fa91c307190>
# 看到了么?上面打印类对象并不是很友好,显示的是对象的内存地址
# 下面我们重构下该类的__repr__以及__str__,看看它们俩有啥区别
# 重构__repr__
class TestRepr(Test):
    def __repr__(self):
        return &#39;TestRepr(%s)&#39; % self.data
>>> tr = TestRepr()
>>> tr               直接终端显示,不print就是面向程序员
TestRepr(hello, world!)
>>> print tr         print是面向程序员
TestRepr(hello, world!)
# 重构__repr__方法后,不管直接输出对象还是通过print打印的信息都按我们__repr__方法中定义的格式进行显示了
# 重构__str__
calss TestStr(Test):
    def __str__(self):
        return &#39;[Value: %s]&#39; % self.data
>>> ts = TestStr()
>>> ts
<__main__.TestStr at 0x7fa91c314e50>
>>> print ts
[Value: hello, world!]
# 你会发现,直接输出对象ts时并没有按我们__str__方法中定义的格式进行输出,而用print输出的信息却改变了

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn