Pour obtenir une représentation de chaîne d'un nom de classe, nous pouvons utiliser obj .__ classe __.__ Nom __ code> est-il possible de surcharger ces méthodes afin que je puisse retourner ma chaîne au lieu du nom de la classe actuelle? p>
3 Réponses :
Yep. mais cela semble être une mauvaise idée. P> P>
Donc ... chaque fois que nous créons un nouvel objet de classe 'A', nous renommerons la classe à 'B'? Il semble beaucoup plus propre (si vous allez renommer la classe) pour renommer directement la classe, pas comme un effet secondaire de la création d'instances.
Juste un exemple de mise en œuvre. L'OP peut implémenter en fonction de ses exigences.
Essayons! (Oui, ces œuvres):
>>> class Foo(object): ... pass ... >>> obj = Foo() >>> obj.__class__.__name__ = 'Bar' >>> obj <__main__.Bar object at 0x7fae8ba3af90> >>> obj.__class__ <class '__main__.Bar'>
Je préférerais utiliser foo .__ nom__ = 'bar' code>, sauf si vous avez un objet arbitraire et que vous souhaitez modifier le nom de sa classe. Mais changer le nom d'une classe inconnue pour avoir un effet sur l'un de ses instances semble extrêmement i> dodgy ...
Cela ne fonctionne pas dans Python3. La sortie est toujours "objet <__ Main__.foo à 0x0000021e6007F278>" ... Ignorer le changement au nom de la classe.
Vous pouvez le faire:
>>> class Foo(object): ... __name__ = "Bar" ... >>> print Foo().__name__ Bar
La deuxième version ne fonctionne que pour les instances - foo .__ Nom __ code> restera inchangé. Fait intéressant, Python3 permet de définir correctement
__ qual nom __ code> de cette façon.
__ classe __ code> et
__ nom __ code> sont des propriétés de classe (je crois), pas des fonctions; Celles-ci sont bien sûr mutables, cependant, vous ne devez vraiment pas modifier ces valeurs pour des raisons évidentes. Qu'est-ce que vous essayez exactement d'accomplir? Essayez-vous de renvoyer une chaîne arbitraire de l'instance de classe? Vous pouvez définir votre propre fonction.