Metodos
En Python, los métodos son funciones que están definidas dentro de una clase y pueden ser llamadas en las instancias de esa clase. Los métodos son una forma de encapsular comportamientos y acciones que están relacionados con la clase en la que se definen.
Métodos de instancia
Los métodos de instancia son aquellos que se definen dentro de la clase y actúan sobre una instancia de la misma. Esto significa que se pueden acceder a los atributos de instancia y modificarlos.
Un método de instancia se define de la misma manera que una función normal, pero se pasa la palabra clave self
como primer argumento. self
se refiere a la instancia que llama al método.
Aquí hay un ejemplo de cómo definir un método de instancia en una clase Person
:
En este ejemplo, say_hello()
es un método de instancia que imprime un saludo con el nombre y la edad de la persona.
Métodos de clase
Los métodos de clase son aquellos que se definen dentro de la clase, pero en lugar de actuar sobre una instancia, actúan sobre la clase en sí misma. Esto significa que no se puede acceder a los atributos de instancia en un método de clase.
Un método de clase se define utilizando la palabra clave @classmethod
antes de su definición. El primer argumento de un método de clase es la clase misma, que se denota como cls
por convención.
Aquí hay un ejemplo de cómo definir un método de clase en una clase Person
:
En este ejemplo, count_people()
es un método de clase que imprime el número de instancias de la clase Person
.
Constructor alternativo
Para crear un constructor alternativo usando un classmethod
, se debe usar el decorador @classmethod
encima del método que se desea usar como constructor. Luego, se puede llamar al método directamente en la clase para crear una nueva instancia de la clase.
Aquí hay un ejemplo de cómo crear un constructor alternativo usando un classmethod
en una clase Person
:
En este ejemplo se ha creado un constructor from_string
que toma como argumento el un string que contiene el nombre y edad de una persona separado por un guion (-
). Despues llama al constructor principal usando la sintaxis return cls(name, age)
para crear una nueva instancia de la clase Person
.
Luego, se han creado dos instancias de la clase Person
, una utilizando el constructor principal y la otra utilizando el constructor alternativo. Al imprimir los valores de name
y age
para cada instancia, se puede ver que los valores son correctos y que el constructor alternativo ha funcionado correctamente.
Métodos estáticos
Los métodos estáticos son aquellos que se definen dentro de la clase, pero no actúan sobre la instancia ni sobre la clase. Esto significa que no se puede acceder a los atributos de instancia ni a los atributos de clase en un método estático.
Un método estático se define utilizando la palabra clave @staticmethod
antes de su definición. A diferencia de los métodos de instancia y de clase, los métodos estáticos no toman self
o cls
como primer argumento.
Aquí hay un ejemplo de cómo definir un método estático en una clase Math
:
En este ejemplo, add()
es un método estático que suma dos números.
Métodos mágicos
Los métodos mágicos son aquellos que tienen nombres especiales y se utilizan para sobrecargar operadores o cambiar el comportamiento predeterminado de las operaciones en una clase.
Por ejemplo, el método __init__()
que hemos visto anteriormente es un método mágico que se llama automáticamente cuando se crea una nueva instancia de la clase.
Para sobrecargar el operador de suma (+
) en una clase Point
, podemos definir el método especial __add__
en la clase. Este método se llama cuando se usa el operador +
en dos instancias de la clase Point
.
Aquí está un ejemplo:
En este ejemplo, definimos la clase Point
con un constructor que toma dos argumentos, x
e y
, que representan las coordenadas del punto. Luego, definimos el método especial __add__
que toma otro objeto Point
como argumento y devuelve un nuevo objeto Point
que es la suma de los dos puntos.
En la última línea del ejemplo, creamos dos instancias de la clase Point
(p1
y p2
) y luego sumamos estas dos instancias usando el operador +
. El resultado se almacena en la variable p3
, que es otra instancia de la clase Point
.
Finalmente, imprimimos las coordenadas de p3
usando los atributos x
e y
.
Last updated