Clases y objetos de Python: programación orientada a objetos



Este blog sobre 'Python Class' trata los fundamentos de la clase, el atributo y varios conceptos de OOPS como herencia, polimorfismo y encapsulación.

Después de que Stack Overflow predijo que para 2019, Python superará a otros lenguajes en términos de desarrolladores activos, la demanda de solo está creciendo.Python sigue el paradigma de programación orientada a objetos. Se trata de declarar clases de Python, crear objetos a partir de ellas e interactuar con los usuarios. En un lenguaje orientado a objetos, el programa se divide en objetos autónomos o puede decirse en varios miniprogramas. Cada objeto representa una parte diferente de la aplicación que puede comunicarse entre ellos.
En este blog de clases de Python, comprenderá cada aspecto de las clases y los objetos en la siguiente secuencia:

Empecemos.:-)





¿Qué es una clase de Python?

Una clase en Python es el modelo a partir del cual se crean objetos específicos. Le permite estructurar su software de una manera particular. Aquí viene una pregunta ¿cómo? Las clases nos permiten agrupar lógicamente nuestros datos y funcionar de una manera que sea fácil de reutilizar y una manera de construir sobre ella si es necesario. Considere la siguiente imagen.

¿Qué es un método tostring en Java?

ClassesAndObjects - clase Python - EdurekaEn la primera imagen (A), representa un plano de una casa que puede considerarse como Clase . Con un mismo plano, podemos crear varias casas y estas se pueden considerar como Objetos . Usando una clase, puede agregar consistencia a sus programas para que puedan usarse de manera más limpia y eficiente. Los atributos son miembros de datos (variables de clase y variables de instancia) y métodos a los que se accede mediante notación de puntos.



  • Variable de clase es una variable que comparten todos los diferentes objetos / instancias de una clase.
  • Variables de instancia son variables que son únicas para cada instancia. Se define dentro de un método y pertenece solo a la instancia actual de una clase.
  • Métodos también se denominan funciones que se definen en una clase y describen el comportamiento de un objeto.

Ahora, sigamos adelante y veamos cómo funciona en PyCharm. Para comenzar, primero eche un vistazo a la sintaxis de una clase de Python.

Sintaxis :

clase Class_name: instrucción-1. . declaración-N

Aquí el ' clase' declaración crea una nueva definición de clase. El nombre de la clase sigue inmediatamente a la palabra clave ' clase' en python seguido de dos puntos. Para crear una clase en Python, considere el siguiente ejemplo:



clase empleado: pase # sin atributos y métodos emp_1 = empleado () emp_2 = empleado () # variable de instancia se puede crear manualmente emp_1.first = 'aayushi' emp_1.last = 'Johari' emp_1.email='aayushi@edureka.co 'emp_1.pay = 10000 emp_2.first =' prueba 'emp_2.last =' abc 'emp_2.email='test@company.com' emp_2.pay = 10000 print (emp_1.email) print (emp_2.email)

Salida

aayushi@edureka.co test@company.com

Ahora, ¿qué pasa si no queremos configurar manualmente estas variables? Verá mucho código y también es propenso a errores. Entonces, para hacerlo automático, podemos usar el método 'init'. Para eso, entendamos qué son exactamente los métodos y atributos en una clase de Python.

Métodos y atributos en una clase de Python

Ahora, la creación de una clase está incompleta sin alguna funcionalidad. Por lo tanto, las funcionalidades se pueden definir estableciendo varios atributos que actúan como un contenedor de datos y funciones relacionadas con esos atributos. Las funciones en Python también se denominan como Métodos . Hablando de la en eso método , es una función especial que se llama cada vez que se crea una instancia de un nuevo objeto de esa clase. Puede pensar en él como un método de inicialización o puede considerar esto como constructores si viene de cualquier otro fondo de programación orientada a objetos como C ++, Java, etc. Ahora, cuando establecemos un método dentro de una clase, reciben una instancia automáticamente. Sigamos con la clase Python y aceptemos el nombre, apellido y salario usando este método.

clase empleado: def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + último + '@ empresa.com' emp_1 = empleado ('aayushi', 'johari', 350000) emp_2 = empleado ('prueba', 'prueba', 100000) imprimir (emp_1.email) imprimir (emp_2.email)

Ahora, dentro de nuestro método 'init', hemos establecido estas variables de instancia (self, first, last, sal). Self es la instancia, lo que significa que siempre que escribimos self.fname = primero, es lo mismo que emp_1.first = ’aayushi’. Luego, hemos creado instancias de la clase de empleado donde podemos pasar los valores especificados en el método init. Este método toma las instancias como argumentos. En lugar de hacerlo manualmente, se hará automáticamente ahora.

A continuación, queremos la capacidad de realizar algún tipo de acción. Para eso, agregaremos un método a esta clase. Supongamos que quiero que la funcionalidad muestre el nombre completo del empleado. Así que implementemos esto de manera práctica.

clase empleado: def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + último + '@ empresa.com' def fullname (self): return '{} {}'. format (self.fname, self.lname) emp_1 = employee ('aayushi', 'johari', 350000) emp_2 = employee ('prueba', 'prueba', 100000) print (emp_1.email) print (emp_2.email) print (emp_1.fullname ()) print (emp_2.fullname ())

Salida

aayushi.johari@company.com test.test@company.com aayushijohari testtest

Como puede ver arriba, he creado un método llamado 'nombre completo' dentro de una clase. Entonces, cada método dentro de una clase de Python toma automáticamente la instancia como primer argumento. Ahora, dentro de este método, he escrito la lógica para imprimir el nombre completo y devolver esto en lugar de emp_1 nombre y apellido. A continuación, he usado 'self' para que funcione con todas las instancias. Por lo tanto, para imprimir esto cada vez, usamos un método .

Continuando con las clases de Python, hay variables que se comparten entre todas las instancias de una clase. Estos se llaman como variables de clase . Las variables de instancia pueden ser únicas para cada instancia como nombres, correo electrónico, sal, etc. ¿Complicado? Entendamos esto con un ejemplo. Consulte el código a continuación para averiguar el aumento anual del salario.

clase empleado: perc_raise = 1.05 def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + último + '@ empresa.com' def fullname (self): return '{} {}'. format (self.fname, self.lname) def apply_raise (self): self.sal = int (self.sal * 1.05 ) emp_1 = empleado ('aayushi', 'johari', 350000) emp_2 = empleado ('prueba', 'prueba', 100000) print (emp_1.sal) emp_1.apply_raise () print (emp_1.sal)

Salida

350000 367500

Como puede ver arriba, primero imprimí el salario y luego apliqué el aumento del 1.5%. Para acceder a estas variables de clase, necesitamos acceder a ellas a través de la clase o una instancia de la clase. Ahora, comprendamos los diversos atributos en una clase de Python.

Atributos en una clase de Python

Los atributos en Python definen una propiedad de un objeto, elemento o archivo. Hay dos tipos de atributos:

  • Atributos de clase integrados: Hay varios atributos integrados presentes dentro de las clases de Python. Por ejemplo, _dict_, _doc_, _name _, etc. Permítanme tomar el mismo ejemplo en el que quiero ver todos los pares clave-valor de employee1. Para eso, simplemente puede escribir la siguiente declaración que contiene el espacio de nombres de la clase:

    imprimir (emp_1 .__ dict__)

    Después de ejecutarlo, obtendrá un resultado como: {‘fname’: ‘aayushi’, ‘lname’: ‘johari’, ‘sal’: 350000, ’email’: ‘aayushi.johari@company.com’}

  • Atributos definidos por los usuarios : Los atributos se crean dentro de la definición de clase. Podemos crear dinámicamente nuevos atributos para instancias existentes de una clase. Los atributos también se pueden vincular a los nombres de las clases.

A continuación, tenemos público, protegido y privado atributos. Vamos a entenderlos en detalle:

Nombrar Tipo Sentido
NombrePúblicoEstos atributos se pueden usar libremente dentro o fuera de una definición de clase.
_nombreProtegidoLos atributos protegidos no deben usarse fuera de la definición de clase, a menos que estén dentro de una definición de subclase
__nombrePrivadoEste tipo de atributo es inaccesible e invisible. No es posible leer ni escribir esos atributos, excepto dentro de la propia definición de clase.


A continuación, comprendamos el componente más importante de una clase de Python, es decir, los objetos.

¿Qué son los objetos en una clase de Python?

Como hemos comentado anteriormente, un objeto se puede utilizar para acceder a diferentes atributos. Se utiliza para crear una instancia de la clase. Una instancia es un objeto de una clase creado en tiempo de ejecución.

TPara darle una descripción general rápida, un objeto es básicamente todo lo que ve a su alrededor. Por ejemplo: un perro es un objeto de la clase animal, yo soy un objeto de la clase humana. Del mismo modo, puede haber diferentes objetos para la misma clase de teléfono.Esto es bastante similar a una llamada de función que ya hemos discutido. Entendamos esto con un ejemplo:

class MyClass: def func (self): print ('Hello') # crea una nueva MyClass ob = MyClass () ob.func ()

mejor ide para el desarrollo de java

Continuando con la clase de Python, entendamos los diversos conceptos de POO.

Conceptos de POO

OOP se refiere a la programación orientada a objetos en Python. Bueno, Python no está completamente orientado a objetos, ya que contiene algunas funciones de procedimiento. Ahora, debe preguntarse cuál es la diferencia entre una programación orientada a objetos y una procedimental. Para aclarar su duda, en una programación procedimental, todo el código se escribe en un procedimiento largo aunque contenga funciones y subrutinas. No es manejable ya que tanto los datos como la lógica se mezclan. Pero cuando hablamos de programación orientada a objetos, el programa se divide en objetos autónomos o en varios miniprogramas. Cada objeto representa una parte diferente de la aplicación que tiene sus propios datos y lógica para comunicarse entre ellos. Por ejemplo, un sitio web tiene diferentes objetos como imágenes, videos, etc.
La programación orientada a objetos incluye el concepto de clase Python, objeto, herencia, polimorfismo, abstracción, etc. Entendamos estos temas en detalle.

Clase Python: Herencia

La herencia nos permite heredar atributos y métodos de la clase base / padre. Esto es útil ya que podemos crear subclases y obtener toda la funcionalidad de nuestra clase principal. Luego, podemos sobrescribir y agregar nuevas funcionalidades sin afectar a la clase principal. Comprendamos el concepto de clase principal y clase secundaria con un ejemplo.

Como podemos ver en la imagen, un hijo hereda las propiedades del padre. De manera similar, en Python, hay dos clases:

1. Clase para padres (clase Super o Base)

2. Clase secundaria (subclase o clase derivada)

Una clase que hereda las propiedades se conoce como Niño Class mientras que una clase cuyas propiedades se heredan se conoce como Padre clase.

La herencia se refiere a la capacidad de crear Subclases que contienen especializaciones de sus padres. Además, se divide en cuatro tipos, a saber, herencias únicas, multinivel, jerárquicas y múltiples. Consulte la imagen a continuación para obtener una mejor comprensión.

Sigamos con la clase Python y entendamos cómo es útil la herencia.

Diga, quiero crear clases para los tipos de empleados. Crearé 'desarrolladores' y 'gerentes' como subclases, ya que tanto los desarrolladores como los gerentes tendrán un nombre, correo electrónico y salario y todas estas funcionalidades estarán en la clase de empleados. Entonces, en lugar de copiar el código de las subclases, podemos simplemente reutilizar el código heredando del empleado.

class empleado: num_employee = 0 raise_amount = 1.04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + last + '@ company.com' employee.num_employee + = 1 def fullname (self): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) clase desarrollador (empleado): pase emp_1 = desarrollador ('aayushi', 'johari', 1000000) print (emp_1.email)
 Salida - aayushi.johari@company.com

Como puede ver en el resultado anterior, todos los detalles de la clase de empleado están disponibles en la clase de desarrollador.Ahora, ¿qué pasa si quiero cambiar el raise_amount para un desarrollador al 10%? veamos cómo se puede hacer de manera práctica.

class empleado: num_employee = 0 raise_amount = 1.04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + last + '@ company.com' employee.num_employee + = 1 def fullname (self): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * cantidad_reubir) clase desarrollador (empleado): cantidad_aumentar = 1.10 emp_1 = desarrollador ('aayushi', 'johari', 1000000) imprimir (emp_1.monto_raise)
 Salida - 1.1

Como ves, se ha actualizado la subida porcentual del salario del 4% al 10%.Ahora, si quiero agregar un atributo más, digamos un lenguaje de programación en nuestro método init, pero no existe en nuestra clase principal. ¿Hay alguna solución para eso? ¡Si! podemos copiar toda la lógica del empleado y hacer eso, pero nuevamente aumentará el tamaño del código. Entonces, para evitar eso, consideremos el siguiente código:

class empleado: num_employee = 0 raise_amount = 1.04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + last + '@ company.com' employee.num_employee + = 1 def fullname (self): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) clase desarrollador (empleado): raise_amount = 1.10 def __init __ (self, first, last, sal, prog_lang): super () .__ init __ (first, last, sal) self.prog_lang = prog_lang emp_1 = developer ( 'aayushi', 'johari', 1000000, 'python') imprimir (emp_1.prog_lang)

Por lo tanto, con solo un poco de código, he realizado cambios. He usado super .__ init __ (primero, último, pagar) que hereda las propiedades de la clase base.Para concluir, la herencia se usa para reutilizar el código y reducir la complejidad de un programa.

Clase Python: polimorfismo

El polimorfismo en informática es la capacidad de presentar la misma interfaz para diferentes formas subyacentes. En términos prácticos, el polimorfismo significa que si la clase B hereda de la clase A, no tiene que heredar todo sobre la clase A, puede hacer algunas de las cosas que la clase A hace de manera diferente. Se usa más comúnmente cuando se trata de herencia. Python es implícitamente polimórfico, tiene la capacidad de sobrecargar operadores estándar para que tengan un comportamiento apropiado según su contexto.

Entendamos con un ejemplo:

class Animal: def __init __ (self, name): self.name = name def talk (self): pass class Dog (Animal): def talk (self): print ('Woof') class Cat (Animal): def talk ( self): print ('¡MAULLIDO!') c = Gato ('gatito') c.talk () d = Perro (Animal) d.talk ()

Salida -

¡Maullar! Guau

A continuación, pasemos a otro concepto de programación orientada a objetos, es decir, abstracción.

Clase Python: Abstracción

La abstracción se utiliza para simplificar la realidad compleja modelando clases apropiadas al problema. Aquí, tenemos una clase abstracta que no se puede instanciar. Esto significa que no puede crear objetos o instancias para estas clases. Solo se puede usar para heredar ciertas funcionalidades a las que llama como clase base. Por lo tanto, puede heredar funcionalidades pero, al mismo tiempo, no puede crear una instancia de esta clase en particular. Comprendamos el concepto de clase abstracta con un ejemplo a continuación:

from abc import ABC, abstractmethod class Empleado (ABC): @abstractmethod def calculate_salary (self, sal): pass class Developer (Empleado): def calculate_salary (self, sal): finalsalary = sal * 1.10 return finalsalary emp_1 = Developer () print (emp_1.calculate_salary (10000))

Salida

fusionar ordenar ejemplo de c ++
11000.0

Como puede ver en el resultado anterior, hemos aumentado el salario base al 10%, es decir, el salario ahora es 11000. Ahora, si realmente continúa y crea un objeto de la clase 'Empleado', le arroja un error como Python no No te permite crear un objeto de clase abstracta. Pero al usar la herencia, puede heredar las propiedades y realizar las tareas respectivas.

Entonces, chicos, esto se trataba de clases y objetos de Python en pocas palabras. Hemos cubierto todos los conceptos básicos de la clase Python, los objetos y varios conceptos orientados a objetos en Python, por lo que puede comenzar a practicar ahora. Espero que hayan disfrutado leyendo este blog sobre 'Python Class' y que tengan claro todos y cada uno de los aspectos que he comentado anteriormente. Después de la clase de Python, crearé más blogs sobre Python para la biblioteca y matriz de scikit learn. ¡Manténganse al tanto!

Tienes una pregunta para nosotros? Por favor, menciónelo en la sección de comentarios de este blog de 'Python Class' y nos comunicaremos con usted lo antes posible.

Para obtener un conocimiento profundo de Python junto con sus diversas aplicaciones, puede con nuestra capacitación en línea en vivo con soporte 24/7 y acceso de por vida.