¿Cómo anulo un método especial de clase?Python que anula la clase (no instancia) métodos especiales
Deseo poder llamar al método __str__()
de la clase sin crear una instancia. Ejemplo:
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())
produce:
<class '__main__.Foo'>
Bar
<class '__main__.StaticFoo'>
StaticBar
<class '__main__.ClassFoo'>
ClassBar
debería ser:
Bar
Bar
StaticBar
StaticBar
ClassBar
ClassBar
Incluso si uso el @staticmethod
o @classmethod
la __str__
sigue utilizando el incorporado en la definición de Python para __str__
. Solo funciona cuando es Foo().__str__()
en lugar de Foo.__str__()
.
-1: "llama al método' __str __() 'de la clase sin crear una instancia". Rompe cada entendimiento que alguien tiene de lo que es un objeto. Por favor no hagas esto. Hace que el programa viole absolutamente nuestras expectativas más fundamentales. –
No estoy de acuerdo. Si llama a str (MyClass), entonces no hay ninguna razón por la que espere que se comporte como si acabara de llamar a str (myClassObject). Es decir, no hay expectativas fundamentales para empezar. Sospecho que quiere crear una clase estática y nunca tiene la intención de crear ninguna instancia de la misma. –