Un constructor es un tipo especial de método (función) que se utiliza para inicializar los miembros de instancia de la clase.
En C++ o Java, el constructor tiene el mismo nombre que su clase, pero trata al constructor de manera diferente en Python. Se utiliza para crear un objeto.
Los constructores pueden ser de dos tipos.
- Constructor parametrizado
- Constructor no parametrizado
La definición del constructor se ejecuta cuando creamos el objeto de esta clase. Los constructores también verifican que haya suficientes recursos para que el objeto realice cualquier tarea de inicio.
Creando el constructor en Python
En Python, el método __calor__() simula el constructor de la clase. Este método se llama cuando se crea una instancia de la clase. Acepta el ser -palabra clave como primer argumento que permite acceder a los atributos o método de la clase.
Podemos pasar cualquier número de argumentos al momento de crear el objeto de clase, dependiendo del __calor__() definición. Se utiliza principalmente para inicializar los atributos de clase. Cada clase debe tener un constructor, incluso si simplemente depende del constructor predeterminado.
Considere el siguiente ejemplo para inicializar el Empleado atributos de clase.
Ejemplo
class Employee: def __init__(self, name, id): self.id = id self.name = name def display(self): print('ID: %d Name: %s' % (self.id, self.name)) emp1 = Employee('John', 101) emp2 = Employee('David', 102) # accessing display() method to print employee 1 information emp1.display() # accessing display() method to print employee 2 information emp2.display()
Producción:
ID: 101 Name: John ID: 102 Name: David
Contar el número de objetos de una clase.
El constructor se llama automáticamente cuando creamos el objeto de la clase. Considere el siguiente ejemplo.
Ejemplo
class Student: count = 0 def __init__(self): Student.count = Student.count + 1 s1=Student() s2=Student() s3=Student() print('The number of students:',Student.count)
Producción:
The number of students: 3
Constructor no parametrizado de Python
El constructor no parametrizado se utiliza cuando no queremos manipular el valor o el constructor que solo tiene a self como argumento. Considere el siguiente ejemplo.
Ejemplo
class Student: # Constructor - non parameterized def __init__(self): print('This is non parametrized constructor') def show(self,name): print('Hello',name) student = Student() student.show('John')
Constructor parametrizado de Python
El constructor parametrizado tiene múltiples parámetros junto con el ser . Considere el siguiente ejemplo.
Ejemplo
class Student: # Constructor - parameterized def __init__(self, name): print('This is parametrized constructor') self.name = name def show(self): print('Hello',self.name) student = Student('John') student.show()
Producción:
This is parametrized constructor Hello John
Constructor predeterminado de Python
Cuando no incluimos el constructor en la clase o nos olvidamos de declararlo, se convierte en el constructor predeterminado. No realiza ninguna tarea pero inicializa los objetos. Considere el siguiente ejemplo.
Ejemplo
class Student: roll_num = 101 name = 'Joseph' def display(self): print(self.roll_num,self.name) st = Student() st.display()
Producción:
101 Joseph
Más de un constructor en una sola clase
Echemos un vistazo a otro escenario, ¿qué sucede si declaramos los dos mismos constructores en la clase?
Ejemplo
class Student: def __init__(self): print('The First Constructor') def __init__(self): print('The second contructor') st = Student()
Producción:
The Second Constructor
En el código anterior, el objeto calle llamado el segundo constructor mientras que ambos tienen la misma configuración. El primer método no es accesible para el calle objeto. Internamente, el objeto de la clase siempre llamará al último constructor si la clase tiene varios constructores.
Nota: La sobrecarga del constructor no está permitida en Python.
Funciones de clase integradas de Python
Las funciones integradas definidas en la clase se describen en la siguiente tabla.
SN | Función | Descripción |
---|---|---|
1 | getattr(obj,nombre,predeterminado) | Se utiliza para acceder al atributo del objeto. |
2 | setattr(obj,nombre,valor) | Se utiliza para establecer un valor particular para el atributo específico de un objeto. |
3 | delattr(obj, nombre) | Se utiliza para eliminar un atributo específico. |
4 | hasattr(obj, nombre) | Devuelve verdadero si el objeto contiene algún atributo específico. |
Ejemplo
class Student: def __init__(self, name, id, age): self.name = name self.id = id self.age = age # creates the object of the class Student s = Student('John', 101, 22) # prints the attribute name of the object s print(getattr(s, 'name')) # reset the value of attribute age to 23 setattr(s, 'age', 23) # prints the modified value of age print(getattr(s, 'age')) # prints true if the student contains the attribute with name id print(hasattr(s, 'id')) # deletes the attribute age delattr(s, 'age') # this will give an error since the attribute age has been deleted print(s.age)
Producción:
John 23 True AttributeError: 'Student' object has no attribute 'age'
Atributos de clase incorporados
Junto con los demás atributos, una clase de Python también contiene algunos atributos de clase integrados que proporcionan información sobre la clase.
Los atributos de clase integrados se proporcionan en la siguiente tabla.
SN | Atributo | Descripción |
---|---|---|
1 | __dict__ | Proporciona el diccionario que contiene información sobre el espacio de nombres de la clase. |
2 | __doc__ | Contiene una cadena que tiene la documentación de la clase. |
3 | __nombre__ | Se utiliza para acceder al nombre de la clase. |
4 | __módulo__ | Se utiliza para acceder al módulo en el que está definida esta clase. |
5 | __bases__ | Contiene una tupla que incluye todas las clases base. |
Ejemplo
class Student: def __init__(self,name,id,age): self.name = name; self.id = id; self.age = age def display_details(self): print('Name:%s, ID:%d, age:%d'%(self.name,self.id)) s = Student('John',101,22) print(s.__doc__) print(s.__dict__) print(s.__module__)
Producción:
None {'name': 'John', 'id': 101, 'age': 22} __main__