Comment puis-je remplacer une méthode spéciale de classe?Python classe dominante (pas d'exemple) méthodes spéciales
Je veux être en mesure d'appeler la méthode __str__()
de la classe sans créer une instance. Exemple:
class Foo:
def __str__(self):
return 'Bar'
class StaticFoo:
@staticmethod
def __str__():
return 'StaticBar'
class ClassFoo:
@classmethod
def __str__(cls):
return 'ClassBar'
if __name__ == '__main__':
print(Foo)
print(Foo())
print(StaticFoo)
print(StaticFoo())
print(ClassFoo)
print(ClassFoo())
produit:
<class '__main__.Foo'>
Bar
<class '__main__.StaticFoo'>
StaticBar
<class '__main__.ClassFoo'>
ClassBar
devrait être:
Bar
Bar
StaticBar
StaticBar
ClassBar
ClassBar
Même si j'utilise le @staticmethod
ou @classmethod
le __str__
utilise encore la définition Python intégré pour __str__
. Cela fonctionne seulement quand c'est Foo().__str__()
au lieu de Foo.__str__()
.
-1: "appeler la méthode' __str __() 'de la classe sans créer une instance". Brise toute compréhension que tout le monde a de ce qu'est un objet. S'il vous plaît ne faites pas cela. Cela fait que le programme viole absolument nos attentes les plus fondamentales. –
Je ne suis pas d'accord. Si vous appelez str (MyClass), il n'y a aucune raison pour que vous vous comportez comme si vous appeliez simplement str (myClassObject). Autrement dit, il n'y a pas d'attentes fondamentales pour commencer. Je soupçonne qu'il veut créer une classe statique et n'a jamais l'intention de créer des instances de celui-ci. –