Konstruktor to specjalny typ metody (funkcji), który służy do inicjowania elementów instancji klasy.
W C++ lub Javie konstruktor ma taką samą nazwę jak jego klasa, ale w Pythonie traktuje go inaczej. Służy do tworzenia obiektu.
Konstruktory mogą być dwojakiego rodzaju.
- Konstruktor parametryczny
- Konstruktor niesparametryzowany
Definicja konstruktora wykonywana jest w momencie tworzenia obiektu tej klasy. Konstruktorzy sprawdzają również, czy obiekt ma wystarczające zasoby, aby wykonać dowolne zadanie startowe.
Tworzenie konstruktora w Pythonie
W Pythonie metoda __ciepło__() symuluje konstruktora klasy. Ta metoda jest wywoływana podczas tworzenia instancji klasy. Akceptuje samego siebie -keyword jako pierwszy argument umożliwiający dostęp do atrybutów lub metody klasy.
Podczas tworzenia obiektu klasy możemy przekazać dowolną liczbę argumentów, w zależności od __ciepło__() definicja. Służy głównie do inicjowania atrybutów klasy. Każda klasa musi mieć konstruktora, nawet jeśli po prostu opiera się na konstruktorze domyślnym.
Rozważ następujący przykład, aby zainicjować plik Pracownik atrybuty klasy.
Przykład
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()
Wyjście:
ID: 101 Name: John ID: 102 Name: David
Liczenie liczby obiektów klasy
Konstruktor wywoływany jest automatycznie, gdy tworzymy obiekt klasy. Rozważ następujący przykład.
Przykład
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)
Wyjście:
The number of students: 3
Konstruktor niesparametryzowany w Pythonie
Konstruktora niesparametryzowanego używamy, gdy nie chcemy manipulować wartością, lub konstruktora, który ma tylko self jako argument. Rozważ następujący przykład.
Przykład
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')
Konstruktor parametryczny Pythona
Sparametryzowany Konstruktor ma wiele parametrów wraz z samego siebie . Rozważ następujący przykład.
Przykład
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()
Wyjście:
This is parametrized constructor Hello John
Domyślny konstruktor Pythona
Jeśli nie dołączymy konstruktora do klasy lub zapomnimy go zadeklarować, stanie się on konstruktorem domyślnym. Nie wykonuje żadnego zadania, ale inicjuje obiekty. Rozważ następujący przykład.
Przykład
class Student: roll_num = 101 name = 'Joseph' def display(self): print(self.roll_num,self.name) st = Student() st.display()
Wyjście:
101 Joseph
Więcej niż jeden konstruktor w jednej klasie
Przyjrzyjmy się innemu scenariuszowi, co się stanie, jeśli zadeklarujemy w klasie dwa takie same konstruktory.
Przykład
class Student: def __init__(self): print('The First Constructor') def __init__(self): print('The second contructor') st = Student()
Wyjście:
The Second Constructor
W powyższym kodzie obiekt ul nazywany drugim konstruktorem, podczas gdy oba mają tę samą konfigurację. Pierwsza metoda nie jest dostępna dla ul obiekt. Wewnętrznie obiekt klasy będzie zawsze wywoływał ostatniego konstruktora, jeśli klasa ma wiele konstruktorów.
Uwaga: Przeciążanie konstruktora nie jest dozwolone w Pythonie.
Wbudowane funkcje klasowe Pythona
Funkcje wbudowane zdefiniowane w klasie zostały opisane w poniższej tabeli.
SN | Funkcjonować | Opis |
---|---|---|
1 | getattr(obiekt, nazwa, domyślne) | Służy do uzyskania dostępu do atrybutu obiektu. |
2 | setattr(obiekt, nazwa, wartość) | Służy do ustawienia określonej wartości konkretnego atrybutu obiektu. |
3 | delattr(obiekt, nazwa) | Służy do usunięcia określonego atrybutu. |
4 | hasattr(obiekt, nazwa) | Zwraca wartość true, jeśli obiekt zawiera określony atrybut. |
Przykład
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)
Wyjście:
John 23 True AttributeError: 'Student' object has no attribute 'age'
Wbudowane atrybuty klas
Oprócz innych atrybutów klasa Pythona zawiera także wbudowane atrybuty klasy, które dostarczają informacji o klasie.
Wbudowane atrybuty klas podano w poniższej tabeli.
SN | Atrybut | Opis |
---|---|---|
1 | __dykt__ | Udostępnia słownik zawierający informacje o przestrzeni nazw klas. |
2 | __doc__ | Zawiera ciąg znaków, który zawiera dokumentację klasy |
3 | __nazwa__ | Służy do uzyskiwania dostępu do nazwy klasy. |
4 | __moduł__ | Służy do dostępu do modułu, w którym zdefiniowana jest ta klasa. |
5 | __bazy__ | Zawiera krotkę zawierającą wszystkie klasy bazowe. |
Przykład
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__)
Wyjście:
None {'name': 'John', 'id': 101, 'age': 22} __main__