Métodos en Python: un concepto clave de la programación orientada a objetos

Contenidos

Visión general

  • Los métodos en Python son un concepto crucial para entender como programador y profesional de la ciencia de datos.
  • Aquí, hablaremos sobre estos diferentes tipos de métodos en Python y cómo implementar el

Introducción

Python es un lenguaje maravilloso, pero puede resultar abrumador para un principiante dominarlo. Como cualquier lenguaje hablado, Python requiere que primero comprendamos los conceptos básicos antes de poder saltar a la construcción de aplicaciones más diversas y más amplias en el campo de la ciencia de datos.

Aquí está la cuestión: si cubre bien sus conceptos básicos, encontrará que Python es muy sencillo. Pero es crucial dedicar el tiempo de aprendizaje inicial a familiarizarse con las funciones que ofrece Python. ¡Realmente valdrá la pena a largo plazo!

types-of-methods-in-python-9192148

Python es, por supuesto, un lenguaje de programación orientada a objetos (OOP). Este es un concepto amplio y no es posible comprenderlo de una vez. De hecho, dominar la programación orientada a objetos puede llevar varios meses o incluso años. Depende totalmente de su capacidad de comprensión. Recomiendo encarecidamente leer primero mi artículo anterior sobre los ‘Conceptos básicos de la programación orientada a objetos’.

Entonces, en este artículo en particular, expandiré más el concepto de métodos en Programación Orientada a Objetos. Hablaremos sobre los diferentes tipos de métodos en Python. Dado que los métodos de Python pueden ser confusos a veces si es nuevo en OOP, cubriré los métodos en Python y sus tipos en detalle en este artículo. Y luego veremos los casos de uso de estos métodos.

Pero espera, ¿qué son los métodos de Python? Bueno, ¡comencemos y descubramos!

Si eres completamente nuevo en Python, deberías revisar esto curso gratuito de Python que le enseñará todo lo que necesita para comenzar en el mundo de la ciencia de datos.

Tabla de contenido

  • ¿Cuáles son los métodos en Python?
  • Tipos de métodos en Python
    • Métodos de instancia
    • Métodos de clase
    • Métodos estáticos
  • Cuándo usar ¿Qué tipo de método Python?

¿Cuáles son los métodos en Python?

¡La gran pregunta!

En Programación Orientada a Objetos, tenemos objetos (redoble de batería, por favor). Estos objetos constan de propiedades y comportamiento. Además, las propiedades del objeto se definen mediante los atributos y el comportamiento se define mediante métodos. Estos métodos se definen dentro de una clase. Estos métodos son el fragmento de código reutilizable que se puede invocar / llamar en cualquier punto del programa.

Python ofrece varios tipos de estos métodos. Estos son cruciales para convertirse en un programador eficiente y, en consecuencia, son útiles para un profesional de la ciencia de datos.

Tipos de métodos en Python

Básicamente, existen tres tipos de métodos en Python:

  • Método de instancia
  • Método de clase
  • Método estático

Hablemos de cada método en detalle.

Métodos de instancia

El propósito de los métodos de instancia es establecer u obtener detalles sobre instancias (objetos), y es por eso que se conocen como métodos de instancia. Son el tipo de método más común que se usa en una clase de Python.

Tienen un parámetro predeterminado: uno mismo, que apunta a una instancia de la clase. Aunque no tienes que pasar eso todo el tiempo. Puede cambiar el nombre de este parámetro, pero es mejor ceñirse a la convención, es decir uno mismo.

Cualquier método que cree dentro de una clase es un método de instancia a menos que especifique especialmente Python de otra manera. Veamos cómo crear un método de instancia:

class My_class:
  def instance_method(self):
    return "This is an instance method."

¡Es tan simple como eso!

Para llamar a un método de instancia, debe crear un objeto / instancia de la clase. Con la ayuda de este objeto, puede acceder a cualquier método de la clase.

obj = My_class()
obj.instance_method()

screenshot-from-2020-10-19-10-03-00-3996945

Cuando se llama al método de instancia, Python reemplaza el uno mismo argumento con el objeto de instancia, obj. Es por eso que debemos agregar un parámetro predeterminado al definir los métodos de instancia. Note que cuando método_instancia () se llama, no tiene que pasar a sí mismo. Python hace esto por ti.

Junto con el parámetro predeterminado self, también puede agregar otros parámetros de su elección:

class My_class:

  def instance_method(self, a):
    return f"This is an instance method with a parameter a = {a}."

Tenemos un parámetro adicional «a» aquí. Ahora creemos el objeto de la clase y llamemos a este método de instancia:

obj = My_class()
obj.instance_method(10)

screenshot-from-2020-10-19-10-05-07-6742157

Nuevamente, puede ver que no hemos pasado ‘self’ como argumento, Python lo hace por nosotros. Pero hay que mencionar otros argumentos, en este caso, es solo uno. Así que hemos pasado 10 como valor de «a».

Puede usar «self» dentro de un método de instancia para acceder a los otros atributos y métodos de la misma clase:

class My_class:

  def __init__(self, a, b):
    self.a = a
    self.b = b

  def instance_method(self):
    return f"This is the instance method and it can access the variables a = {self.a} and
 b = {self.b} with the help of self."

Nota que el método __init __ () es un tipo especial de método conocido como constructor. Este método se llama cuando se crea un objeto a partir de la clase y permite que la clase inicialice los atributos de una clase.

obj = My_class(2,4)
obj.instance_method()

screenshot-from-2020-10-19-10-06-26-6642977

Probemos este código en la ventana de codificación en vivo a continuación.

Con la ayuda de la palabra clave “self” self.a y self.b, hemos accedido a las variables presentes en el método __init __ () de la misma clase.

Junto con los objetos de una clase, un método de instancia puede acceder a la propia clase con la ayuda de yo .__ clase__ atributo. Veamos como:

class My_class():

  def instance_method(self):
    print("Hello! from %s" % self.__class__.__name__)

obj = My_class()
obj.instance_method()

screenshot-from-2020-10-19-10-08-29-4298856

El atributo self .__ class __.__ name__ devuelve el nombre de la clase con la que está relacionada la instancia de clase (self).

2. Métodos de clase

El propósito de los métodos de la clase es establecer u obtener los detalles (estado) de la clase. Por eso se conocen como métodos de clase. No pueden acceder ni modificar datos de instancia específicos. Están vinculados a la clase en lugar de a sus objetos. Dos cosas importantes sobre los métodos de clase:

  • Para definir un método de clase, debe especificar que es un método de clase con la ayuda del decorador @classmethod
  • Los métodos de clase también toman un parámetro predeterminado: cls, que apunta a la clase. Nuevamente, esto no es obligatorio para nombrar el parámetro predeterminado «cls». Pero siempre es mejor ir con las convenciones

Ahora veamos cómo crear métodos de clase:

class My_class:

  @classmethod
  def class_method(cls):
    return "This is a class method."

¡Tan simple como eso!

Como dije anteriormente, con la ayuda de la instancia de la clase, puede acceder a cualquier método. Así que crearemos la instancia de este My_class también e intentaremos llamar a este class_method ():

obj = My_class()
obj.class_method()

screenshot-from-2020-10-19-10-09-19-4759548

¡Esto también funciona! Podemos acceder a los métodos de la clase con la ayuda de una instancia / objeto de clase. Pero podemos acceder a los métodos de la clase directamente sin crear una instancia u objeto de la clase. Veamos como:

screenshot-from-2020-10-19-10-09-19-4759548

Sin crear una instancia de la clase, puede llamar al método de la clase con – Cnombre_lass.nombre_método ().

Pero esto no es posible con los métodos de instancia donde tenemos que crear una instancia de la clase para llamar a los métodos de instancia. Veamos qué sucede cuando intentamos llamar directamente al método de instancia:

My_class.instance_method()

screenshot-from-2020-10-19-10-11-15-9970810

Tenemos un error que indica que falta un argumento posicional: «yo». Y es obvio porque los métodos de instancia aceptan una instancia de la clase como parámetro predeterminado. Y no proporciona ninguna instancia como argumento. Aunque esto puede pasar por alto el nombre del objeto como argumento:

My_class.instance_method(obj)

screenshot-from-2020-10-19-10-03-00-3996945

¡Impresionante!

3. Métodos estáticos

Los métodos estáticos no pueden acceder a los datos de la clase. En otras palabras, no necesitan acceder a los datos de la clase. Son autosuficientes y pueden trabajar solos. Dado que no están adjuntos a ningún atributo de clase, no pueden obtener ni establecer el estado de la instancia o el estado de la clase.

Para definir un método estático, podemos usar el decorador @staticmethod (de manera similar usamos el decorador @classmethod). A diferencia de los métodos de instancia y de clase, no necesitamos pasar ningún parámetro especial o predeterminado. Veamos la implementación:

class My_class:

  @staticmethod
  def static_method():
    return "This is a static method."

¡Y hecho!

Tenga en cuenta que no tenemos ningún parámetro predeterminado en este caso. Ahora bien, ¿cómo llamamos a los métodos estáticos? Nuevamente, podemos llamarlos usando el objeto / instancia de la clase como:

obj = My_class()
obj.static_method()

screenshot-from-2020-10-19-10-13-22-4953073

Y podemos llamar a métodos estáticos directamente, sin crear un objeto / instancia de la clase:

screenshot-from-2020-10-19-10-13-22-4953073

Puede notar que la salida es la misma usando ambas formas de llamar a métodos estáticos.

Aquí hay un resumen de la explicación que hemos visto:

    • Un método de instancia conoce su instancia (y a partir de eso, su clase)
    • Un método de clase conoce su clase
    • Un método estático no conoce su clase o instancia

¿Cuándo usar qué método de Python?

Los métodos de instancia son los métodos más utilizados. Incluso entonces, es difícil saber cuándo puede utilizar métodos de clase o métodos estáticos. La siguiente explicación saciará tu curiosidad:

Método de clase – El uso más común de los métodos de clase es para crear métodos de fábrica. Los métodos de fábrica son aquellos métodos que devuelven un objeto de clase (como un constructor) para diferentes casos de uso. Entendamos esto usando el ejemplo dado:

from datetime import date

class Dog:
  def __init__(self, name, age):
    self.name = name
    self.age = age

# a class method to create a Dog object with birth year.
  @classmethod
  def Year(cls, name, year):
    return cls(name, date.today().year - year)

Aquí, como puede ver, el método de clase está modificando el estado de la clase. Si tenemos el año de nacimiento de cualquier perro en lugar de la edad, entonces con la ayuda de este método podemos modificar los atributos de la clase.

Revisemos esto:

Dog1 = Dog('Bruno', 1)
Dog1.name , Dog1.age
screenshot-from-2020-10-19-10-14-14-4460244

Aquí hemos construido un objeto de la clase. Esto toma el nombre y la edad de dos parámetros. Al imprimir los atributos de la clase obtenemos Bruno y 1 como salida, que fueron los valores que proporcionamos.

Dog2 = Dog.Year('Dobby', 2017)
Dog2.name , Dog2.age

screenshot-from-2020-10-19-10-15-07-9260481

Aquí, hemos construido otro objeto de la clase Perro usando el método de la clase. Año(). El método Year () toma la clase Person como primer parámetro cls y devuelve el constructor llamando cls (nombre, fecha.today (). año – año), que es equivalente a Perro (nombre, fecha.hoy (). Año – año).

Como puede ver al imprimir el nombre de los atributos y la edad, obtuvimos el nombre que proporcionamos y la edad convertida del año de nacimiento utilizando el método de clase.

Método estático – Se utilizan para crear funciones de utilidad. Para realizar las tareas de programación de rutina, utilizamos funciones de utilidad. Un ejemplo simple podría ser:

class Calculator:
 
  @staticmethod
  def add(x, y):
    return x + y

print('The sum is:', Calculator.add(15, 10))

screenshot-from-2020-10-19-10-15-47-8126031

Puede ver que el caso de uso de este método estático es muy claro, sumando los dos números dados como parámetros. Siempre que tenga que sumar dos números, puede llamar a este método directamente sin preocuparse por la construcción del objeto.

Notas finales

En este artículo, aprendimos sobre los métodos de Python, los tipos de métodos y vimos cómo implementar cada método.

Te recomiendo que revises estos recursos sobre programación orientada a objetos:

Avíseme en la sección de comentarios a continuación si tiene alguna pregunta o comentario. ¡Feliz aprendizaje!

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.