6
votes

Est-il possible de remplacer `__Name__` dérivé de l'objet?

Pour obtenir une représentation de chaîne d'un nom de classe, nous pouvons utiliser obj .__ classe __.__ Nom __ est-il possible de surcharger ces méthodes afin que je puisse retourner ma chaîne au lieu du nom de la classe actuelle?


1 commentaires

__ classe __ et __ nom __ 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.


3 Réponses :


5
votes

Yep. xxx

mais cela semble être une mauvaise idée.


2 commentaires

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.



7
votes

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'>


2 commentaires

Je préférerais utiliser foo .__ nom__ = 'bar' , 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 dodgy ...


Cela ne fonctionne pas dans Python3. La sortie est toujours "objet <__ Main__.foo à 0x0000021e6007F278>" ... Ignorer le changement au nom de la classe.



3
votes

Vous pouvez le faire:

>>> class Foo(object):
...     __name__ = "Bar"
... 
>>> print Foo().__name__
Bar


1 commentaires

La deuxième version ne fonctionne que pour les instances - foo .__ Nom __ restera inchangé. Fait intéressant, Python3 permet de définir correctement __ qual nom __ de cette façon.