Clases y objetos de Python (con ejemplos)

En este tutorial, aprenderá sobre la funcionalidad principal de los objetos y clases de Python. Aprenderá qué es una clase, cómo crearla y utilizarla en su programa.

Video: clases y objetos de Python

Objetos y clases de Python

Python es un lenguaje de programación orientado a objetos. A diferencia de la programación orientada a procedimientos, donde el énfasis principal está en las funciones, la programación orientada a objetos hace hincapié en los objetos.

Un objeto es simplemente una colección de datos (variables) y métodos (funciones) que actúan sobre esos datos. De manera similar, una clase es un modelo para ese objeto.

Podemos pensar en la clase como un boceto (prototipo) de una casa. Contiene todos los detalles sobre los pisos, puertas, ventanas, etc. Basándonos en estas descripciones construimos la casa. La casa es el objeto.

Como se pueden hacer muchas casas a partir del plano de una casa, podemos crear muchos objetos a partir de una clase. Un objeto también se denomina instancia de una clase y el proceso de creación de este objeto se denomina instanciación .

Definiendo una clase en Python

Al igual que las definiciones de funciones comienzan con la palabra clave def en Python, las definiciones de clases comienzan con una palabra clave de clase.

La primera cadena dentro de la clase se llama docstring y tiene una breve descripción sobre la clase. Aunque no es obligatorio, es muy recomendable.

Aquí hay una definición de clase simple.

 class MyNewClass: '''This is a docstring. I have created a new class''' pass

Una clase crea un nuevo espacio de nombres local donde se definen todos sus atributos. Los atributos pueden ser datos o funciones.

También contiene atributos especiales que comienzan con dos guiones bajos __. Por ejemplo, __doc__nos da la cadena de documentación de esa clase.

Tan pronto como definimos una clase, se crea un nuevo objeto de clase con el mismo nombre. Este objeto de clase nos permite acceder a los diferentes atributos, así como crear instancias de nuevos objetos de esa clase.

 class Person: "This is a person class" age = 10 def greet(self): print('Hello') # Output: 10 print(Person.age) # Output: print(Person.greet) # Output: 'This is my second class' print(Person.__doc__)

Salida

 10 Esta es una clase individual

Creando un objeto en Python

Vimos que el objeto de clase podría usarse para acceder a diferentes atributos.

También se puede utilizar para crear nuevas instancias de objetos (instanciación) de esa clase. El procedimiento para crear un objeto es similar a la llamada a una función.

 >>> harry = Person()

Esto creará una nueva instancia de objeto llamada harry. Podemos acceder a los atributos de los objetos usando el prefijo del nombre del objeto.

Los atributos pueden ser datos o métodos. Los métodos de un objeto son funciones correspondientes de esa clase.

Esto quiere decir que, dado que Person.greetes un objeto de función (atributo de clase), Person.greetserá un objeto de método.

 class Person: "This is a person class" age = 10 def greet(self): print('Hello') # create a new object of Person class harry = Person() # Output: print(Person.greet) # Output:  print(harry.greet) # Calling object's greet() method # Output: Hello harry.greet() 

Salida

  Hola 

Es posible que haya notado el selfparámetro en la definición de función dentro de la clase, pero llamamos al método simplemente como harry.greet()sin argumentos. Todavía funcionó.

Esto se debe a que, siempre que un objeto llama a su método, el propio objeto se pasa como primer argumento. Entonces, se harry.greet()traduce en Person.greet(harry).

In general, calling a method with a list of n arguments is equivalent to calling the corresponding function with an argument list that is created by inserting the method's object before the first argument.

For these reasons, the first argument of the function in class must be the object itself. This is conventionally called self. It can be named otherwise but we highly recommend to follow the convention.

Now you must be familiar with class object, instance object, function object, method object and their differences.

Constructors in Python

Class functions that begin with double underscore __ are called special functions as they have special meaning.

Of one particular interest is the __init__() function. This special function gets called whenever a new object of that class is instantiated.

This type of function is also called constructors in Object Oriented Programming (OOP). We normally use it to initialize all the variables.

 class ComplexNumber: def __init__(self, r=0, i=0): self.real = r self.imag = i def get_data(self): print(f'(self.real)+(self.imag)j') # Create a new ComplexNumber object num1 = ComplexNumber(2, 3) # Call get_data() method # Output: 2+3j num1.get_data() # Create another ComplexNumber object # and create a new attribute 'attr' num2 = ComplexNumber(5) num2.attr = 10 # Output: (5, 0, 10) print((num2.real, num2.imag, num2.attr)) # but c1 object doesn't have attribute 'attr' # AttributeError: 'ComplexNumber' object has no attribute 'attr' print(num1.attr)

Output

 2+3j (5, 0, 10) Traceback (most recent call last): File "", line 27, in print(num1.attr) AttributeError: 'ComplexNumber' object has no attribute 'attr'

In the above example, we defined a new class to represent complex numbers. It has two functions, __init__() to initialize the variables (defaults to zero) and get_data() to display the number properly.

An interesting thing to note in the above step is that attributes of an object can be created on the fly. We created a new attribute attr for object num2 and read it as well. But this does not create that attribute for object num1.

Deleting Attributes and Objects

Cualquier atributo de un objeto se puede eliminar en cualquier momento, utilizando la deldeclaración. Pruebe lo siguiente en el shell de Python para ver el resultado.

 >>> num1 = ComplexNumber(2,3) >>> del num1.imag >>> num1.get_data() Traceback (most recent call last):… AttributeError: 'ComplexNumber' object has no attribute 'imag' >>> del ComplexNumber.get_data >>> num1.get_data() Traceback (most recent call last):… AttributeError: 'ComplexNumber' object has no attribute 'get_data'

Incluso podemos eliminar el objeto en sí, usando la declaración del.

 >>> c1 = ComplexNumber(1,3) >>> del c1 >>> c1 Traceback (most recent call last):… NameError: name 'c1' is not defined

De hecho, es más complicado que eso. Cuando lo hacemos c1 = ComplexNumber(1,3), se crea un nuevo objeto de instancia en la memoria y el nombre c1 se une a él.

En el comando del c1, este enlace se elimina y el nombre c1 se elimina del espacio de nombres correspondiente. Sin embargo, el objeto continúa existiendo en la memoria y, si no se le asigna ningún otro nombre, se destruye automáticamente más tarde.

Esta destrucción automática de objetos no referenciados en Python también se denomina recolección de basura.

Eliminar objetos en Python elimina el enlace de nombres

Articulos interesantes...