English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial básica de Python

Control de flujo de Python

Funciones en Python

Tipos de datos en Python

Operaciones de archivos de Python

Objetos y clases de Python

Fecha y hora de Python

Conocimientos avanzados de Python

Manual de Python

Clases y objetos en Python

En este artículo, aprenderá las características fundamentales de Python, los objetos y las clases de Python. Aprenderá qué es una clase, cómo crearla y cómo usarla en el programa.

¿Qué son las clases y objetos en Python?

Python es un lenguaje de programación orientado a objetos. A diferencia del diseño de programas orientado a procesos, que se centra principalmente en las funciones, el diseño de programas orientado a objetos se enfoca en los objetos.

Un objeto es una colección de datos (variables) y métodos (funciones) que actúan sobre estos datos. Y la clase es el plano del objeto.

Podemos ver la clase como un bosquejo (prototipo) de una casa. Contiene todos los detalles sobre el suelo, puertas, ventanas, etc. Basándonos en estas descripciones, construimos casas. Las casas son objetos.

Dado que se pueden crear muchas casas a partir de descripciones, podemos crear muchos objetos según la clase. Los objetos también se conocen como ejemplos de la clase y el proceso de creación de estos objetos se llamaInstanciación.

Definir una clase en Python

así como la definición de una función se hace con la palabra clavedefAl igual que comienza con la palabra claveclassDefine unClase.

La primera cadena se llama docstring y tiene una breve descripción de la clase. Aunque no es obligatorio, se recomienda hacerlo.

Esta es una definición de clase simple.

class MyNewClass:
    '''Esta es una cadena de caracteres de documentación. He creado una nueva clase'''
    pasar

Una clase crea un nuevo espacio localEspacio de nombres,y en ella se definen todas sus propiedades. Las propiedades pueden ser datos o funciones.

Entre ellos, hay algunas propiedades especiales que comienzan con dobles guiones bajos (__). Por ejemplo, __doc__ nos da la cadena de caracteres de documentación de la clase.

Una vez definida una clase, se crea un nuevo objeto de clase con el mismo nombre. Este objeto de clase nos permite acceder a diferentes propiedades e instanciar nuevos objetos de esta clase.

class MyClass:
	"Esta es mi segunda clase"
	a = 10
	def func(self):
		print('Hola')
# Salida: 10
print(MyClass.a)
# Salida: <función MyClass.func en 0x0000000003079BF8>
print(MyClass.func)
# Salida: 'Esta es mi segunda clase'
print(MyClass.__doc__)

Al ejecutar el programa, la salida será:

10
<function 0x7feaa932eae8="" at="" myclass.func=""
Esta es mi segunda clase

Crear objetos con Python

Vimos que los objetos de clase se pueden usar para acceder a diferentes propiedades.

También se puede usar para crear nuevos ejemplos de objetos de esta clase (instanciar). El proceso de creación de objetos es similar aFunciónLlamar.

>>> ob = MyClass()

Esto creará un nuevo objeto de ejemplo ob. Podemos usar el prefijo del nombre del objeto para acceder a las propiedades del objeto.

Las propiedades pueden ser datos o métodos. Los métodos del objeto son las funciones correspondientes de la clase. Cualquier objeto de función que actúe como propiedad de la clase define un método para el objeto de esa clase.

Esto significa que, ya que MyClass.func es un objeto de función (propiedad de la clase), ob.func se convertirá en un objeto de método.

class MyClass:
	"Esta es mi segunda clase"
	a = 10
	def func(self):
		print('Hola')
# Crear una nueva MyClass
ob = MyClass()
# Salida: <función MyClass.func en 0x000000000335B0D0>
print(MyClass.func)
# Salida: <método enlazado de MyClass.func de <__main__.MyClass objeto en 0x000000000332DEF0>>
print(ob.func)
# Llamando a la función func()
# Salida: Hello
ob.func()

Quizás ya haya notado el parámetro self en la definición de la función interna de la clase, pero, solo estamos abreviando este método como ob.func(), sinParámetros. Esto sigue siendo válido.

Esto se debe a que, siempre que un objeto llama a su método, el objeto mismo se pasa como primer parámetro. Por lo tanto, ob.func() se convierte automáticamente en MyClass.func(ob).

Generalmente, llamar a un método con una lista de n parámetros es equivalente a llamar a una función con una lista de parámetros, que se crea insertando el objeto del método antes del primer parámetro.

Por estos motivos, el primer parámetro de la función dentro de la clase debe ser el objeto mismo. Esto se conoce generalmente comoself. Puede usar otros nombres, pero le recomendamos encarecidamente que siga las convenciones.

Ahora, debe familiarizarse con los objetos de clase, objetos de ejemplo, objetos de función, objetos de método y sus diferencias.

Constructor en Python

Las funciones de clase que comienzan con un doble guión bajo (__ ) se llaman funciones especiales porque tienen un significado especial.

__init__() es una función especialmente útil. Cada vez que se crea un nuevo objeto de esta clase, se llama a esta función especial.

Este tipo de función en la programación orientada a objetos (OOP) también se llama constructor. Generalmente lo usamos para inicializar todas las variables.

class ComplexNumber:
    def __init__(self, r = 0, i = 0):
        self.real = r
        self.imag = i
    def getData(self):
        print("{0"+{1}}.format(self.real, self.imag))
# Crea otro objeto ComplexNumber
c1 = NúmeroComplejo(2,3)
# Llama a la función getData()
# Salida: 2+3j
c1.getData()
# Crea otro objeto ComplexNumber
# Y crea una nueva propiedad "attr"
c2 = NúmeroComplejo(5)
c2.attr = 10
# Salida: (5, 0, 10)
print((c2.real, c2.imag, c2.attr))
# Pero c1El objeto no tiene atributo "attr"
# AttributeError: 'objeto NúmeroComplejo' no tiene atributo 'attr'
c1.attr

En el ejemplo anterior, definimos una nueva clase para representar números complejos. Tiene dos funciones, __init__() para inicializar las variables (por defecto cero), getData() para mostrar correctamente los números.

Una cosa interesante que hay que prestar atención en los pasos anteriores es que se pueden crear dinámicamente las propiedades de los objetos. Creamos una propiedad attr para el objeto c2Se creó una nueva propiedad attr y se leyó, pero esto no creó el atributo attr para el objeto c1Crear el atributo.

Eliminar atributo y objeto

Se puede usar la declaración del para eliminar cualquier atributo del objeto en cualquier momento. Intente la siguiente operación en el Shell de Python para ver la salida.

>>> c1 = NúmeroComplejo(2,3)
>>> del c1.imag
>>> c1.getData()
Traceback (llamada más reciente):
...
AttributeError: 'objeto NúmeroComplejo' no tiene atributo 'imag'
>>> del NúmeroComplejo.getData
>>> c1.getData()
Traceback (llamada más reciente):
...
AttributeError: 'objeto NúmeroComplejo' no tiene atributo 'getData'

Incluso podemos usar la declaración del para eliminar el objeto en sí.

>>> c1 = NúmeroComplejo(1,3)
>>> del c1
>>> c1
Traceback (llamada más reciente):
...
NameError: 'name 'c'1'is not defined'

En realidad, es más complejo. Después de completarse, se creará un nuevo objeto de ejemplo en la memoria c1 = NúmeroComplejo(1,3) nombrec1vinculado a él.

Comando del c1Eliminará este vínculo y eliminará el nombre correspondiente del espacio de nombresc1Sin embargo, el objeto sigue existiendo en la memoria, y si no hay otros nombres asociados, el objeto se eliminará automáticamente más tarde.

En Python, este proceso de eliminación automática de objetos no referenciados también se conoce como recolección de basura.