8
votes

Comportement asymétrique pour __getattr__, Newstyle vs Classes Oldstyle

C'est la première fois que j'écris ici, désolé si le message est fou ou trop longtemps.

J'étais intéressé par la compréhension de la manière dont les objets d'objets sont récupérés en cas de besoin. J'ai donc lu la documentation de Python 2.7 intitulée "Modèle de données" ici , J'ai rencontré __ getattr __ code> et, afin de vérifier si j'ai compris ou non son comportement, j'ai écrit ces wrappers de chaîne simples (et incomplets). P>

>>> y=NewStr("test")
>>> y+y
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'NewStr' and 'NewStr'


2 commentaires

S'il vous plaît, n'utilisez pas de classes de style anciennes pour rien. Ils sont obsolètes pour des raisons évidentes - comme celle-ci. Comme ils sont obsolètes, sachant comment ils travaillaient ne sont pas utiles. Je les jeter et passer à autre chose, s'il vous plaît.


La comparaison du comportement des anciennes et de nouvelles classes aide à illustrer la manière dont les classes de style ne fonctionnent, surtout si vous connaissez des classes de style ancien. Il est en effet non surprenant qu'ils travaillent de différentes manières et il est réconfortant de connaître les nouvelles classes de travail comme prévu. Néanmoins, il y a de la valeur pour essayer de comprendre pourquoi le code est interprété comme si ce n'est que la version.


3 Réponses :


1
votes

Votre __ getattr __ ne retourne rien. Je ne sais pas pourquoi la classe ancienne est en train de faire le __ getattr __ avant la recherche de __ ajouter __ , mais c'est, et cela tente d'appeler la valeur de retour qui est < Code> Aucune .

La classe de style nouvelle fonctionne correctement: vous n'avez pas défini __ ajouter __ donc il ne sait pas comment les ajouter.


0 commentaires

0
votes