Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> python

Objetos y clases de Python

Objetos y clases de Python

En este tutorial, aprenderá sobre la funcionalidad principal de los objetos y clases de Python. Aprenderá qué es una clase, cómo crearla y usarla 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 una clase como un boceto (prototipo) de una casa. Contiene todos los detalles sobre los pisos, puertas, ventanas, etc. En base a 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 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 de 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 hay atributos especiales que comienzan con guiones bajos dobles __ . 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 instanciar 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: <function Person.greet>
print(Person.greet)

# Output: "This is a person class"
print(Person.__doc__)

Salida

10
<function Person.greet at 0x7fc78c6e8160>
This is a person class

Creación de 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 una llamada de función.

>>> harry = Person()

Esto creará una nueva instancia de objeto llamada harry . Podemos acceder a los atributos de los objetos utilizando 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 significa decir, desde Person.greet es un objeto de función (atributo de clase), Person.greet será 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: <function Person.greet>
print(Person.greet)

# Output: <bound method Person.greet of <__main__.Person object>>
print(harry.greet)

# Calling object's greet() method
# Output: Hello
harry.greet()

Salida

<function Person.greet at 0x7fd288e4e160>
<bound method Person.greet of <__main__.Person object at 0x7fd288e9fa30>>
Hello

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

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

En general, llamar a un método con una lista de n argumentos es equivalente a llamar a la función correspondiente con una lista de argumentos que se crea insertando el objeto del método antes del primer argumento.

Por estas razones, el primer argumento de la función en clase debe ser el objeto mismo. Esto se llama convencionalmente self . Se puede nombrar de otra manera, pero recomendamos encarecidamente seguir la convención.

Ahora debe estar familiarizado con el objeto de clase, el objeto de instancia, el objeto de función, el objeto de método y sus diferencias.


Constructores en Python

Funciones de clase que comienzan con doble guión bajo __ se denominan funciones especiales porque tienen un significado especial.

De particular interés es el __init__() función. Esta función especial se llama cada vez que se instancia un nuevo objeto de esa clase.

Este tipo de función también se denomina constructores en Programación Orientada a Objetos (POO). Normalmente lo usamos para inicializar todas las 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)

Salida

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

En el ejemplo anterior, definimos una nueva clase para representar números complejos. Tiene dos funciones, __init__() para inicializar las variables (predeterminado en cero) y get_data() para mostrar el número correctamente.

Una cosa interesante a tener en cuenta en el paso anterior es que los atributos de un objeto se pueden crear sobre la marcha. Creamos un nuevo atributo attr para el objeto num2 y léelo también. Pero esto no crea ese atributo para el objeto num1 .


Eliminación de atributos y objetos

Cualquier atributo de un objeto se puede eliminar en cualquier momento, utilizando el del declaració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 instrucción del.

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

En realidad, es más complicado que eso. Cuando 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 sigue 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 sin referencia en Python también se denomina recolección de elementos no utilizados.


python

  1. Clase y objeto de C#
  2. Clase y método abstractos de C#
  3. C# Clase parcial y método parcial
  4. Clase y método sellados de C#
  5. Clases y objetos de C++
  6. Función amiga de C++ y Clases amigas
  7. Palabras clave e identificadores de Python
  8. Declaración, sangría y comentarios de Python
  9. Administración de archivos y directorios de Python
  10. Excepciones personalizadas de Python
  11. Herencia de Python