PROGRAMACIÓN EN PITÓN
Las clases de Python tienen muchas caras. Por ejemplo, puedes crear una clase vacía:
class MyClass:
pass
y todavía puede ser útil, por ejemplo, como un valor centinela. Puedes agregar un __init__() método:
class MyClass:
def __init__(self, value):
self.value = value
Seguirá siendo una clase muy simple, pero esta vez mantendrá un valor particular.
Un gran poder de las clases de Python es que se pueden usar como tipos, como se muestra a continuación:
def foo(x: MyClass, n: int) -> list[MyClass]:
return [x] * n
Recuerde que no implementar el __init__() El método no significa que no exista. De hecho, sobrecargamos el __init__() método anterior, no sólo implementarlo. Este es otro aspecto importante de las clases de Python que debes conocer: puedes sobrecargar muchos otros métodos, como __new__(), __eq__()y __setattr__(). Si no sobrecarga estos métodos, algunos tendrán su implementación predeterminada (como __init__(), __new__(), __setattr__()y __eq__()), mientras que otros no (como __lt__() y todos los demás métodos de comparación distintos de __eq__(), __getitem__(), __setitem__() y __len__()).
Una clase puede heredar de otra clase, como aquí:
class MyClass(dict):
@staticmethod
def say_hello(self):
print("Hello!")
y, como antes, puede utilizar métodos estáticos, pero también métodos de clase. Puede crear clases mixtas y clases base abstractas, singletons y muchas otras cosas, a veces muy útiles.
Las clases de Python tienen tantas caras que tomaría años discutir cada una de ellas en detalle, y lo haremos en futuros artículos. En este, nos centraremos en un aspecto particular: la diferencia entre y el poder de la __repr__() y __str__() métodos.
A primera vista, puede parecer que se trata de un tema menor, pero en realidad es bastante importante. Es fácil implementar una clase de Python, pero requiere más esfuerzo implementar una bien…