In Entwicklung Letztes Updateated:
Teilen:
Cloudways bietet verwaltetes Cloud-Hosting für Unternehmen jeder Größe zum Hosten einer Website oder komplexer Webanwendungen.

Möchten Sie mit objektorientiertem Design in Python beginnen? Machen Sie noch heute die ersten Schritte, indem Sie mehr über die __init__-Methode von Python erfahren.

In diesem Tutorial gehen wir auf die Grundlagen von Python-Klassen und -Objekten ein und lernen anschließend etwas über die __init__ Methode.

Am Ende dieses Tutorials werden Sie in der Lage sein, die folgenden Fragen zu beantworten:

  • Was sind Instanzvariablen oder Instanzattribute?
  • Wie hilft die Init-Methode bei der Initialisierung der Instanzattribute?
  • Wie können wir Standardwerte für Attribute festlegen?
  • How can we use class methods as constructors to create Gegenstände?

Fangen wir an.

Python-Klassen und -Objekte

Classes are fundamental to object-oriented programming in Python. We can create a class and define Attribute und Methoden– zusammenbinden technische Daten und Assoziated Funktionalität.

Once we’ve created a class, we can use it as a blueprint (or a template) zu create objects (instances).

👩‍🏫Example time! Let’s create an Employee Klasse, wobei jedes Objekt dieser Klasse die folgenden Attribute hat:

  • full_name: der vollständige Name des Mitarbeiters im firstName lastName Format
  • emp_id: die Mitarbeiter-ID
  • department: die Abteilung, zu der sie gehören
  • experience: die Anzahl der Jahre Erfahrung, die sie haben

Was bedeutet das? 🤔

Jeder einzelne Mitarbeiter wird eine Instanz oder ein Objekt des sein Employee Klasse. Und jedes Objekt wird seinen eigenen Wert für das haben full_name, emp_id, department und experience.

Diese Attribute werden auch aufgerufen Instanzvariablen, und wir werden die Begriffe Attribute und Instanzvariablen austauschbar verwenden.

We’ll get to adding attributes in a bit. For now we create an Employee Klasse so:

class Employee:
    pass

Die richtigen pass (als Platzhalter) hilft uns, Fehler beim Ausführen des Skripts zu vermeiden.

Obwohl die aktuelle Version des Employee Klasse ist nicht sehr hilfreich, es ist immer noch eine gültig class. So we can create Objekte der Employee Klasse:

employee_1 = Employee()

print(employee_1)
#Output: <__main__.Employee object at 0x00FEE7F0>

Wir können auch Attribute hinzufügen und sie wie gezeigt mit Werten initialisieren:

employee_1.full_name = 'Amy Bell'
employee_1.department = 'HR'

But this approach to adding instance attributes is both inefficient and prone to errors. Also, this does not allow the use of class as a template zu create objects. Here’s where the __init__ Methode hilft.

Verstehen der Rolle der __init__-Methode in einer Python-Klasse

Wir sollten in der Lage sein, die Instanzvariablen zu initialisieren, wenn wir ein Objekt instanziieren und das __init__ Die Methode hilft uns dabei. Der __init__ method is called every time a new object of the class is created to initialize the values of the instance variables.

Wenn Sie in einer Sprache wie C++ programmiert haben, werden Sie feststellen, dass __init__  Die Methode funktioniert ähnlich wie Konstruktoren.

Definieren der __init__-Methode

Fügen wir das hinzu __init__ Methode zum Employee Klasse:

class Employee:
    def __init__(self, full_name,emp_id,department,experience):
        self.full_name = full_name
        self.emp_id = emp_id
        self.department = department
        self.experience = experience

Der self Der Parameter bezieht sich auf die Instanz der Klasse und die self.attribute initialisiert die Instanz attribute auf den Wert auf der rechten Seite.

We can now create objects like so:

employee_2 = Employee('Bella Joy','M007','Marketing',3)
print(employee_2)
# Output: <__main__.Employee object at 0x017F88B0>

Wenn wir die Mitarbeiterobjekte ausdrucken, erhalten wir außer der Klasse, zu der sie gehören, keine nützlichen Informationen. Fügen wir ein hinzu __repr__ Methode, die eine Darstellungszeichenfolge für die Klasse definiert:

 def __repr__(self):
        return f"{self.full_name},{self.emp_id} from {self.department} with {self.experience} years of experience."

Hinzufügen der __repr__ zu den Employee Klasse, wir haben:

class Employee:
    def __init__(self, full_name,emp_id,department,experience):
        self.full_name = full_name
        self.emp_id = emp_id
        self.department = department
        self.experience = experience
    
     def __repr__(self):
        return f"{self.full_name},{self.emp_id} from {self.department} with {self.experience} years of experience."

Jetzt haben die Mitarbeiterobjekte eine hilfreiche Darstellungszeichenfolge:

print(employee_2)
# Output: Bella Joy,M007 from Marketing with 3 years of experience.

Einige Konventionen

Bevor wir fortfahren, hier ein paar Hinweise:

  • Wir verwendeten self als erster Parameter in der __init__ method to refer to the class instance itself und benutzt self.attribute_name um die verschiedenen Attribute zu initialisieren. Benutzen self ist die bevorzugte Konvention (Sie können jedoch jeden anderen Namen verwenden).
  • Bei der Definition der __init__ Methode legen wir die Parameternamen in der fest __init__ Definitionen, die mit den Namen der Attribute übereinstimmen. Dies verbessert die Lesbarkeit.

So fügen Sie Standardwerte für Attribute hinzu

In dem Beispiel, das wir bisher codiert haben, sind alle Attribute vorhanden falls angefordert. Meaning object creation is successful only if we pass in the values for all the fields to the constructor.

Try to instantiate an object of the Employee class without passing in the value for the experience attribute:

employee_3 = Employee('Jake Lee','E001','Engineering')

Sie erhalten die folgende Fehlermeldung:

Traceback (most recent call last):
  File "main.py", line 22, in <module>
    employee_3 = Employee('Jake Lee','E001','Engineering')
TypeError: __init__() missing 1 required positional argument: 'experience'

Aber wenn Sie bestimmte Attribute machen möchten optional, können Sie dies tun, indem Sie bei der Definition Standardwerte für diese Attribute angeben __init__ Methode.

Hier geben wir einen Standardwert von an 0 für die experience Attribut:

class Employee:
    def __init__(self, full_name,emp_id,department,experience=0):
        self.full_name = full_name
        self.emp_id = emp_id
        self.department = department
        self.experience = experience
    
     def __repr__(self):
        return f"{self.full_name},{self.emp_id} from {self.department} with {self.experience} years of experience."

Der employee_3 object is created without value for the experience Attribut; Für wird der Standardwert 0 verwendet experience.

employee_3 = Employee('Jake Lee','E001','Engineering')
print(employee_3.experience)
# Output: 0

Alternative Klassenkonstruktoren, die Klassenmethoden verwenden

Bisher haben wir nur gesehen, wie man das definiert __init__ Methode und legen Sie bei Bedarf Standardwerte für Attribute fest. Wir wissen auch, dass wir die Werte für übergeben müssen falls angefordert Attribute im Konstruktor.

Manchmal sind die Werte für diese Instanzvariablen (oder Attribute) jedoch in einer anderen Datenstruktur verfügbar, beispielsweise einem Tupel, einem Wörterbuch oder einem JSON-String.

Also, was machen wir?

Nehmen wir ein Beispiel. Angenommen, wir haben Werte der Instanzvariablen in einem Python-Wörterbuch:

dict_fanny = {'name':'Fanny Walker','id':'H203','dept':'HR','exp':2}

Wir können auf das Wörterbuch zugreifen und alle Attribute wie folgt abrufen:

name = dict_fanny['name']
id = dict_fanny['id']
dept = dict_fanny['dept']
exp = dict_fanny['exp']

After this you can create an object by passing in these values to the class constructor:

employee_4 = Employee(name, id, dept, exp)
print(employee_4)
# Output: Fanny Walker,H203 from HR with 2 years of experience.

Remember: you need to do this for every new object that you create. This approach is inefficient and we can definitely do better. Aber wie?

In Python können wir verwenden Klassenmethoden as Konstruktoren zu create objects of the class. To create a class method we use the @classmethod Dekorateur.

Definieren wir eine Methode, die das Wörterbuch analysiert, die Werte der Instanzvariablen abruft und sie zum Erstellen verwendet Employee Objekte.

    @classmethod
    def from_dict(cls,data_dict):
        full_name = data_dict['name']
        emp_id = data_dict['id']
        department = data_dict['dept']
        experience = data_dict['exp']
        return cls(full_name, emp_id, department, experience)

When we need to create objects using data from the dictionary, we can use the from_dict() Klasse Methode.

💡 Beachten Sie die Verwendung von cls in der Klassenmethode statt self. Just the way we use self to refer to the instance, cls wird verwendet, um auf die Klasse zu verweisen. Außerdem sind Klassenmethoden an die Klasse und nicht an Objekte gebunden.

Wenn wir also die Klassenmethode aufrufen from_dict() zu create objects, we call it on the Employee Klasse:

emp_dict = {'name':'Tia Bell','id':'S270','dept':'Sales','exp':3}
employee_5 = Employee.from_dict(emp_dict)
print(employee_5)
# Output: Tia Bell,S270 from Sales with 3 years of experience.

Wenn wir nun ein Wörterbuch für jedes davon haben n Mitarbeiter können wir nutzen from_dict() class method as a constructor to instantiate in objects—without having to retrieve the instant variable values from the dictionary.

????Ein Hinweis zu Klassenvariablen

Hier haben wir die Klassenmethode definiert, die an die Klasse und nicht an einzelne Instanzen gebunden ist. Ähnlich wie bei Klassenmethoden können wir auch Klassenvariablen haben.

Wie Klassenmethoden, Klassenvariablen sind an die Klasse und nicht an eine Instanz gebunden. Wenn ein Attribut für alle Instanzen der Klasse einen festen Wert annimmt, können wir erwägen, sie als Klassenvariablen zu definieren.

Häufig gestellte Fragen (FAQs)

1. Warum benötigen Sie die Methode __init__ in Python?

Der __init__ Mit der Methode in einer Klassendefinition können wir die Attribute oder Instanzvariablen aller Instanzen der Klasse initialisieren. Der __init__  method is called every time a new instance of the class is created.

2. Können Sie mehrere __init__-Methoden in einer Python-Klasse haben?

Das Ziel, mehrere zu haben __init__ methods in a Python class is to provide multiple constructors that instantiate objects. But you cannot define multiple  __init__ Methoden. Wenn Sie mehrere definieren  __init__ Methoden überschreibt die zweite und aktuellste Implementierung die erste. Sie können jedoch die verwenden @classmethod decorator to define class methods that can be used as constructors to instantiate Objekte.

3. Was passiert, wenn Sie die Methode __init__ nicht in einer Klasse definieren?

Wenn Sie das nicht definieren __init__ method, you can still instantiate objects. However, you will have to manually add instance variables and assign values to each of them. You will nicht be able to pass in the values for the instance variables in the constructor. This is not only prone to errors but also defeats the purpose of having the class as a blueprint from which we can instantiate Objekte.

4. Können Sie Standardwerte für Argumente in der Methode __init__ haben?

Ja, es ist möglich, bei der Definition Standardwerte für ein oder mehrere Attribute anzugeben __init__ Methode. Durch die Bereitstellung von Standardwerten können diese Attribute im Konstruktor optional gemacht werden. Die Attribute nehmen die Standardwerte an, wenn wir die Werte für diese Attribute nicht im Konstruktor übergeben.

5. Können Sie Attribute außerhalb der __init__-Methode ändern?

Yes, you can always update the value of an attribute outside the __init__ method. You can also add new attributes dynamically to an instance after you’ve created the particular instance.

Schlussfolgerung

In diesem Tutorial haben wir gelernt, wie man das verwendet __init__ method to initialize the values of instance variables. Though this is straightforward, it can be repetitive—especially when you have a lot of attributes. 

Wenn Sie interessiert sind, können Sie das erkunden Datenklassenmodul. In Python 3.7 and later, you can use the built-in data classes module to create data classes that store data. In addition to default implementations of the  __init__ und andere häufig verwendete Methoden; Sie verfügen über viele coole Funktionen für Typhinweise, komplexe Standardwerte und Optimierung.

Als nächstes erfahren Sie mehr darüber if __name__=='__main__' in Python.

Teilen:
  • Bala Priya C
    Autor
    Bala Priya ist ein Entwickler und technischer Redakteur aus Indien mit über drei Jahren Erfahrung im Bereich des Schreibens technischer Inhalte. Sie teilt ihre Erkenntnisse mit der Entwickler-Community, indem sie technische Tutorials, Anleitungen und mehr verfasst.
  • Narendra Mohan Mittal
    Herausgeber

    Narendra Mohan Mittal ist eine vielseitige und erfahrene Expertin für digitales BrandingateKern- und Inhaltsredakteur mit über 12 Jahren Erfahrung. Er ist Goldmedaillengewinner in M-Tech und B-Tech in Informatik und Ingenieurwesen.


    Zur Zeit,…

Danke an unsere Sponsoren

Weitere großartige Lektüre zum Thema Entwicklung

Treiben Sie Ihr Geschäft an

Einige der Tools und Services, die Ihrem Unternehmen helfen grow.