Python Klassenmethode: Vollständiger Leitfaden

目次

1. Was ist eine Klassenmethode in Python? Klar und verständlich von den Grundlagen erklärt

Python verfügt über ein Konzept namens „Klassenmethode“, das verwendet wird, um Methoden zu definieren, die auf die gesamte Klasse wirken. Klassenmethoden werden eingesetzt, um Operationen direkt auf der Klasse selbst durchzuführen, nicht auf spezifische Instanzen (Objekte).
In diesem Artikel erklären wir detailliert die Grundlagen der Klassenmethoden, ihre Verwendung und Anwendungsmöglichkeiten.

1.1 Was ist eine Klassenmethode in Python?

Klassenmethoden werden mit dem Python-@classmethod-Dekorator definiert und zeichnen sich dadurch aus, dass sie als ersten Parameter die Klasse selbst empfangen.
Im Gegensatz dazu nehmen normale Instanzmethoden self als ersten Parameter, während Klassenmethoden cls (Abkürzung für class) als Parameter erhalten.
Durch die Verwendung von cls ist es möglich, auf Klassenattribute zuzugreifen oder die Klasse selbst zu manipulieren.

1.2 Merkmale von Klassenmethoden

Klassenmethoden haben folgende Merkmale.

  1. Können ohne Erstellung einer Instanz aufgerufen werden
  • Normale Instanzmethoden können nur aufgerufen werden, wenn eine Instanz der Klasse erstellt wurde. Klassenmethoden hingegen können ohne Erstellung einer Instanz direkt von der Klasse aus aufgerufen werden.
  1. Klassenattribute können manipuliert werden
  • Klassenmethoden können direkt auf Variablen zugreifen, die der Klasse gehören (Klassenattribute). Dadurch wird es einfacher, gemeinsame Daten für alle Instanzen zu verwalten.
  1. Verwendung als Factory-Methode
  • Klassenmethoden werden häufig als Factory-Methode verwendet, um Instanzen der Klasse basierend auf spezifischen Daten zu erzeugen.

1.3 Vorteile des Lernens von Klassenmethoden

Wenn Sie Klassenmethoden in Python verstehen und einsetzen können, ergeben sich folgende Vorteile.

Das Verständnis für objektorientierte Programmierung vertieft sichDie Wiederverwendbarkeit des Codes verbessert sichKlassenattribute können effizient verwaltet werden

1.4 Voraussetzungswissen zum Verständnis von Klassenmethoden

1.4.1 Klassen und Objekte in Python

Python basiert auf objektorientierter Programmierung (OOP) und verwendet das Konzept der „Klasse“, um Code zu strukturieren.

class Car:
    def __init__(self, brand):
        self.brand = brand  # Instanzattribut

my_car = Car("Toyota")
print(my_car.brand)  # Toyota

1.4.2 Der Unterschied zwischen self und cls

Um Klassenmethoden zu verstehen, ist der „Unterschied zwischen self und cls“ ein sehr wichtiger Punkt.

SchlüsselwortRolleWo verwendet?
selfReferenziert die Instanz (Objekt)Instanzmethode
clsReferenziert die Klasse selbstKlassenmethode

Schauen Sie sich das folgende Beispiel an.

class Example:
    class_variable = "Klassenvariable"

    def instance_method(self):
        return "Das ist eine Instanzmethode"

    @classmethod
    def class_method(cls):
        return f"Wert der Klassenvariable: {cls.class_variable}"

# Klassenmethoden können ohne Instanz aufgerufen werden
print(Example.class_method())  # Wert der Klassenvariable: Klassenvariable

# Instanzmethoden können nur mit einer Instanz aufgerufen werden
example_instance = Example()
print(example_instance.instance_method())  # Das ist eine Instanzmethode

1.5 Zusammenfassung

  • Klassenmethoden wirken direkt auf die Klasse
  • Werden mit dem @classmethod-Dekorator definiert und nehmen cls als ersten Parameter
  • Können ohne Erstellung einer Instanz aufgerufen werden
  • Können für die Verwaltung von Klassenattributen oder als Factory-Methode verwendet werden
  • self referenziert die Instanz, cls referenziert die Klasse

2. Definition und Verwendung von Python-Klassenmethoden

In der vorherigen Sektion haben wir die grundlegenden Konzepte und die Rolle von Klassenmethoden erläutert. Hier erklären wir detailliert, wie man Klassenmethoden definiert und verwendet, mit konkreten Code-Beispielen.

2.1 Grundlegende Syntax von Klassenmethoden

Um Klassenmethoden in Python zu definieren, verwendet man den @classmethod-Dekorator. Die folgende ist die grundlegende Syntax.

class Klassenname:
    @classmethod
    def Methodenname(cls, Argument1, Argument2, ...):
        # Verarbeitung der Methode
        return Ergebnis

Punkte zur Definition von Klassenmethoden

  1. Den @classmethod-Dekorator direkt vor der Methode angeben
  2. Als ersten Parameter cls empfangen (cls verweist auf die Klasse selbst)
  3. Zugang zu Klassen variablen oder anderen Klassenmethoden möglich
  4. Direkt über den Klassennamen aufrufbar (keine Instanz erforderlich)

2.2 Implementierungsbeispiel für Klassenmethoden

Lassen Sie uns eine Klassenmethode definieren und ihre Funktionsweise überprüfen.

class Sample:
    class_variable = "Klassenvariable"

    @classmethod
    def class_method(cls):
        print(f"Klassenmethode wurde aufgerufen. Wert der Klassenvariable: {cls.class_variable}")

# Aufruf der Klassenmethode
Sample.class_method()

Ausführungsresultat

Klassenmethode wurde aufgerufen. Wert der Klassenvariable: Klassenvariable

Erklärung des Codes

  • class_variable ist als Klassenvariable definiert.
  • class_method() ist mit dem @classmethod-Dekorator versehen und greift über cls auf class_variable zu.
  • Sample.class_method() ist der Punkt, dass die Methode direkt ohne Erstellung einer Instanz aufgerufen werden kann.

2.3 Aufruf von Klassenmethoden

Klassenmethoden können auf folgende zwei Weisen aufgerufen werden.

① Direkt über den Klassennamen aufrufen

Sample.class_method()

Dies ist die gängigste Aufrufmethode und ermöglicht die Ausführung von Operationen auf Klassen Ebene.

② Über eine Instanz aufrufen

sample_instance = Sample()
sample_instance.class_method()

In diesem Fall wird die Methode über die Instanz ausgeführt, aber beachten Sie, dass cls die Klasse und nicht die Instanz erhält.

2.4 Klassenmethoden zur Operation von Klassen variablen

Klassenmethoden sind sehr nützlich, um Klassen variablen zu ändern. Zum Beispiel können sie zur Verwaltung von Versionsinformationen oder Konfigurationswerten verwendet werden.

class Config:
    version = "1.0"

    @classmethod
    def update_version(cls, new_version):
        cls.version = new_version  # Klassenvariable ändern

# Version über Klassenmethode aktualisieren
Config.update_version("2.0")
print(Config.version)  # 2.0

Erklärung

  • update_version() ändert die Klassenvariable über cls.version.
  • Durch den Aufruf von Config.update_version("2.0") wird die Version für alle Instanzen aktualisiert.

2.5 Erstellung von Instanzen mit Klassenmethoden (Fabrikmethode)

Klassenmethoden werden auch als Fabrikmethode genutzt, um neue Instanzen zu erstellen.

class User:
    def __init__(self, name):
        self.name = name

    @classmethod
    def from_string(cls, name_str):
        return cls(name_str)  # Neue Instanz mit cls erstellen

# Instanz mit Klassenmethode erstellen
user = User.from_string("Satō")
print(user.name)  # Satō

Erklärung

  • Die from_string()-Methode erstellt eine neue Instanz durch Aufruf von cls(name_str).
  • Dadurch ergibt sich dasselbe Ergebnis wie bei der direkten Instanziierung User("Satō"), aber es ist möglich, Vorverarbeitung der Daten einzufügen.

2.6 Unterschiede zu Instanzmethoden

Im Vergleich zu normalen Instanzmethoden gibt es folgende Unterschiede zwischen Instanzmethoden und Klassenmethoden.

Art der MethodeErster ParameterAufrufmethodeBetroffener Bereich
Instanzmethodeselfinstance.method()Spezifische Instanz
KlassenmethodeclsClass.method() oder instance.method()Gesamte Klasse
Statische MethodeKeineClass.method()Verhält sich wie eine unabhängige Funktion

Klassenmethoden eignen sich für Operationen, die unabhängig von Instanzen sind und die gesamte Klasse betreffen.

2.7 Einsatzmöglichkeiten von Klassenmethoden

Klassenmethoden sind in folgenden Situationen nützlich.

Klassenlevel-Daten verwalten

  • Aktualisierung von Konfigurationswerten oder Zählern
  • Beispiel: Config.update_version()

Als Fabrikmethode nutzen

  • Instanz aus einem bestimmten Format erstellen
  • Beispiel: User.from_string()

Auch in geerbten Klassen anwendbar

  • Durch Verwendung von cls auf geerbte Klassen anwendbar
class Base:
    @classmethod
    def show_class_name(cls):
        print(f"Klassenname: {cls.__name__}")

class Derived(Base):
    pass

Derived.show_class_name()  # Klassenname: Derived

Auf diese Weise können Klassenmethoden der Elternklasse geerbt und verwendet werden.

2.8 Zusammenfassung

In dieser Sektion haben wir die Definition und Verwendung von Klassenmethoden in Python erläutert. Lassen Sie uns die Punkte zusammenfassen.

  • Klassenmethoden mit @classmethod definieren
  • Mit cls Klassen variablen oder Klassenoperationen ermöglichen
  • Klassenmethoden direkt ohne Instanz aufrufbar
  • Als Fabrikmethode für die Instanzerstellung nutzbar
  • Klassenmethoden ideal für Logik, die die gesamte Klasse beeinflusst
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

3. Praktische Beispiele für die Verwendung von Python-Klassenmethoden (praktische Anwendungsfälle)

In den vorherigen Abschnitten haben wir die Grundlagen der Python-Klassenmethoden und deren Verwendung erlernt.
Dieser Abschnitt erklärt wie Klassenmethoden in der Praxis verwendet werden durch konkrete Anwendungsfälle.

3.1 Repräsentative Verwendungsmuster für Klassenmethoden

Klassenmethoden werden besonders effektiv in den folgenden Situationen genutzt.

  1. Verwendung als Factory-Methode
  2. Verwaltung von Konfigurationswerten oder gemeinsamen Daten
  3. Methoden zum Ändern des Klassenstatus
  4. Dynamische Nutzung von Klassen unter Verwendung der Vererbung
  5. Vereinfachung der Datenbankverbindungen und -verwaltung

Jeden Fall betrachten wir detailliert, unter Einschluss von Code-Beispielen.

3.2 Anwendungsfall ①: Verwendung als Factory-Methode

Eine Factory-Methode ist eine Methode zur Erstellung neuer Instanzen basierend auf Daten in einem spezifischen Format.

Zum Beispiel betrachten wir den folgenden Fall.

Erstellen einer Instanz der User-Klasse aus String-Daten

class User:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @classmethod
    def from_string(cls, user_info):
        name, age = user_info.split(",")  # Komma-separierten String aufteilen
        return cls(name, int(age))  # Neue Instanz erstellen

# Instanz mit Klassenmethode erstellen
user = User.from_string("Satō,30")
print(user.name)  # Satō
print(user.age)   # 30

Vorteile dieser Methode

  • Kann die Vorverarbeitung von Daten zentral verwalten
  • Die Lesbarkeit des Codes verbessert sich und flexible Instanzerstellung wird möglich
  • Leicht anpassbar an unterschiedliche Datenformate

Zum Beispiel kann dieses Muster bei der Handhabung von JSON- oder CSV-Daten angewendet werden.

3.3 Anwendungsfall ②: Verwaltung von Konfigurationswerten oder gemeinsamen Daten

Bei der Verwaltung von Konfigurationswerten, die in der gesamten Anwendung geteilt werden, oder änderbaren Standardwerten ist die Verwendung von Klassenmethoden praktisch.

class Config:
    default_language = "Japanisch"
    default_theme = "Hell"

    @classmethod
    def update_language(cls, new_language):
        cls.default_language = new_language  # Klassenvariable aktualisieren

    @classmethod
    def update_theme(cls, new_theme):
        cls.default_theme = new_theme

# Einstellungen mit Klassenmethode ändern
Config.update_language("Englisch")
Config.update_theme("Dunkel")

print(Config.default_language)  # Englisch
print(Config.default_theme)     # Dunkel

Vorteile dieser Methode

  • Kann in der gesamten App einheitliche Einstellungen aufrechterhalten
  • Änderungen auf Klassenlevel anwenden, nicht pro individueller Instanz

3.4 Anwendungsfall ③: Methoden zum Ändern des Klassenstatus

Mit Klassenmethoden kann der Klassenstatus (z. B. die Gesamtzahl der Instanzen) verwaltet werden.

class Counter:
    count = 0  # Klassenvariable (gemeinsam für alle Instanzen)

    def __init__(self):
        Counter.increment_count()

    @classmethod
    def increment_count(cls):
        cls.count += 1  # Klassenvariable ändern

# Beim Erstellen einer Instanz erhöht sich der Zähler
c1 = Counter()
c2 = Counter()
c3 = Counter()

print(Counter.count)  # 3

Vorteile dieser Methode

  • Einheitliche Datenverwaltung für alle Instanzen
  • Mit Klassenmethoden kann die Erstellung neuer Instanzen überwacht werden

3.5 Anwendungsfall ④: Dynamische Nutzung von Klassen unter Verwendung der Vererbung

Da Klassenmethoden auch in geerbten Klassen gelten, können die Klassenmethoden der Elternklasse dynamisch überschrieben werden.

class Animal:
    species = "Unbekannt"

    @classmethod
    def set_species(cls, new_species):
        cls.species = new_species

class Dog(Animal):
    pass

class Cat(Animal):
    pass

# Unterschiedliche Einstellungen pro Klasse möglich
Dog.set_species("Hund")
Cat.set_species("Katze")

print(Dog.species)  # Hund
print(Cat.species)  # Katze
print(Animal.species)  # Unbekannt (Wert der Elternklasse bleibt unverändert)

Vorteile dieser Methode

  • Flexible Datenverwaltung unter Berücksichtigung der Vererbungsbeziehungen
  • Da die Methoden der Elternklasse wiederverwendet werden können, wird Code-Duplikation vermieden

3.6 Anwendungsfall ⑤: Vereinfachung der Datenbankverbindungen und -verwaltung

In Web-Anwendungen oder Backend-Entwicklung kann die Verwendung von Klassenmethoden die Datenbankverbindungen und -verwaltung vereinheitlichen.

class Database:
    connection = None

    @classmethod
    def connect(cls, db_url):
        if cls.connection is None:
            cls.connection = f"Verbunden mit {db_url}"
        return cls.connection

# Mit Datenbank verbinden
db1 = Database.connect("mysql://localhost:3306/mydb")
db2 = Database.connect("mysql://localhost:3306/mydb")

print(db1)  # Verbunden mit mysql://localhost:3306/mydb
print(db1 is db2)  # True (gleiche Verbindung wird wiederverwendet)

Vorteile dieser Methode

  • Vereinheitlichte Verwaltung der Datenbankverbindungen
  • Gleiche Verbindung kann von mehreren Instanzen geteilt werden (Singleton-Muster)

3.7 Zusammenfassung

In diesem Abschnitt wurden praktische Beispiele für die Verwendung von Klassenmethoden vorgestellt.

Wichtige Punkte

  • Als Factory-Methode verwenden, um Vorverarbeitung von Daten und Instanzerstellung zu vereinfachen
  • Konfigurationswerte oder gemeinsame Daten als Klassenvariablen verwalten und Änderungen erleichtern
  • Mit Klassenmethoden zum Ändern des Klassenstatus die Verwaltung von Instanzzahlen usw. vereinfachen
  • Vererbungsbeziehungen von Klassen nutzen, um Klassenmethoden der Elternklasse dynamisch anzuwenden
  • Auch für Datenbankverbindungsverwaltung usw. einsetzbar

4. Der Unterschied zwischen Klassenmethoden und anderen Methoden (mit Vergleichstabelle)

Um die Klassenmethoden in Python zu verstehen, ist es wichtig, die Unterschiede zu Instanzmethoden und statischen Methoden klar zu machen.
Jede Methode hat eine unterschiedliche Rolle, und durch die angemessene Unterscheidung kann man effizienteren Code schreiben.
In diesem Abschnitt erklären wir die Unterschiede zwischen Klassenmethoden und anderen Methoden im Vergleich.

4.1 Die 3 Arten von Methoden in Python

In Python-Klassen können die folgenden 3 Arten von Methoden definiert werden.

Art der MethodeDekoratorErstes ArgumentZugriff auf KlassenattributeZugriff auf InstanzattributeAufrufmethode
Instanzmethodekeineselfmöglichmöglichinstance.method()
Klassenmethode@classmethodclsmöglichnicht möglichClass.method() oder instance.method()
Statische Methode@staticmethodkeinenicht möglichnicht möglichClass.method() oder instance.method()

Diese Tabelle als Basis, lassen Sie uns die Unterschiede der jeweiligen Methoden detailliert betrachten.

4.2 Was ist eine Instanzmethode?

Die Instanzmethode ist eine Methode zur Implementierung unterschiedlicher Verhaltensweisen für jede Instanz (Objekt) der Klasse. Nimmt self als erstes Argument und kann Instanzattribute manipulieren.

Beispiel für eine Instanzmethode

class Dog:
    def __init__(self, name):
        self.name = name  # Instanzvariable

    def bark(self):
        return f"{self.name} bellt!"

# Instanz erstellen
Dog1 = Dog("Pochi")
dog2 = Dog("Shiro")

print(dog1.bark())  # Pochi bellt!
print(dog2.bark())  # Shiro bellt!

Punkte

self verwenden, um instanzspezifische Daten zu handhabenInstanz muss erstellt werden, um die Methode aufzurufen

4.3 Was ist eine Klassenmethode?

Die Klassenmethode ist eine Methode für Operationen, die die gesamte Klasse betreffen. Durch cls als erstes Argument können Klassenattribute direkt geändert oder referenziert werden.

Beispiel für eine Klassenmethode

class Cat:
    species = "Katzenfamilie"

    def __init__(self, name):
        self.name = name

    @classmethod
    def set_species(cls, new_species):
        cls.species = new_species  # Klassenattribut ändern

# Klassenmethode verwenden, um Klassenattribut zu ändern
Cat.set_species("Felidae")

# Die Änderung wird auf alle Instanzen übernommen
cat1 = Cat("Mike")
cat2 = Cat("Tama")

print(cat1.species)  # Felidae
print(cat2.species)  # Felidae
print(Cat.species)   # Felidae

Punkte

cls verwenden, um Klassenattribute zu manipulierenPraktisch für die Implementierung von Verarbeitungen, die die gesamte Klasse betreffenKann direkt mit Class.method() aufgerufen werden, ohne Instanz zu erstellen

4.4 Was ist eine statische Methode?

Die statische Methode wird verwendet, um allgemeine Funktionen, die weder von der Klasse noch von der Instanz abhängen, innerhalb der Klasse zu definieren.
Sie nimmt weder self noch cls als erstes Argument und kann nicht auf Klassenattribute oder Instanzattribute zugreifen.

Beispiel für eine statische Methode

class MathHelper:
    @staticmethod
    def add(x, y):
        return x + y

    @staticmethod
    def multiply(x, y):
        return x * y

# Statische Methoden können ohne Instanz aufgerufen werden
print(MathHelper.add(3, 5))  # 8
print(MathHelper.multiply(4, 6))  # 24

Punkte

Praktisch zum Definieren von Funktionen, die keine Klassenattribute oder Instanzattribute verwendenKann wie eine normale Funktion verwendet werden, aber innerhalb der Klasse organisiertKann ohne Instanzerstellung aufgerufen werden (Class.method())

4.5 Welche Methode sollte verwendet werden?

Die Kriterien zur Auswahl der geeigneten Methode lassen sich wie folgt zusammenfassen.

Art der MethodeSolche Fälle verwenden
InstanzmethodeBei der Handhabung unterschiedlicher Daten pro Instanz (z. B.: self.name manipulieren)
KlassenmethodeBei Verarbeitungen, die die gesamte Klasse betreffen (z. B.: Klassenattribute ändern)
Statische MethodeBeim Definieren allgemeiner Funktionen im Zusammenhang mit der Klasse (z. B.: mathematische Operationen oder Datenkonvertierung)

4.6 Zusammenfassung

In diesem Abschnitt haben wir die Unterschiede zwischen Klassenmethoden und anderen Methoden (Instanzmethoden, statische Methoden) erläutert.

Überprüfung der Punkte

  • Instanzmethode
  • self als erstes Argument und manipuliert Instanzattribute
  • Angemessen für die Verwaltung unterschiedlicher Daten pro Instanz
  • Klassenmethode
  • cls als erstes Argument und manipuliert Klassenattribute
  • Angemessen für die Verwaltung von Daten, die die gesamte Klasse betreffen, oder Änderungen der Einstellungen
  • Statische Methode
  • Nehmen weder self noch cls und führen Verarbeitungen durch, die unabhängig von Klasse oder Instanz sind
  • Angemessen für Funktionen, die mit der Klasse zusammenhängen, aber keine spezifische Instanz oder Klassenattribute beeinflussen
年収訴求

5. Häufige Fragen zu Python-Klassenmethoden (FAQ)

Beim Erlernen von Klassenmethoden in Python stoßen viele auf Fragen.
Dieser Abschnitt erklärt häufig gestellte Fragen zu Klassenmethoden und deren Antworten verständlich.

5.1 Fragen zu den Grundlagen von Klassenmethoden

Q1. Wann sollte man Klassenmethoden verwenden?

A. Klassenmethoden werden verwendet, um Operationen zu beschreiben, die die gesamte Klasse beeinflussen.
Insbesondere sind sie nützlich in den folgenden Fällen.

Klassenvariable ändern wollenEin Factory-Methode erstellen, um Instanzen aus Daten in einem bestimmten Format zu generierenDen Zustand der Klasse verwalten wollen (z. B. Zähler oder Konfigurationswerte)

Q2. Was ist der Unterschied zwischen Klassenmethoden und Instanzmethoden?

A. Klassenmethoden verwenden @classmethod und nehmen cls als ersten Parameter.
Instanzmethoden hingegen nehmen self als ersten Parameter.

Art der MethodeErster ParameterZugriff auf Klassen variablenZugriff auf Instanzvariablen
InstanzmethodeselfMöglichMöglich
KlassenmethodeclsMöglichUnmöglich

Beispiel (Vergleich)

class Sample:
    class_variable = "Klassenvariable"

    def __init__(self, name):
        self.name = name  # Instanzvariable

    def instance_method(self):
        return f"Instanzvariable: {self.name}"

    @classmethod
    def class_method(cls):
        return f"Klassenvariable: {cls.class_variable}"

# Instanzmethode wird über eine Instanz aufgerufen
s = Sample("Tarō")
print(s.instance_method())  # Instanzvariable: Tarō

# Klassenmethode kann direkt von der Klasse aufgerufen werden
print(Sample.class_method())  # Klassenvariable: Klassenvariable

Q3. Kann man von einer Klassenmethode auf Instanzvariablen zugreifen?

A.Nein. Klassenmethoden dienen zum Zugriff auf Klassen variablen (cls.attribute), nicht auf Instanzvariablen (self.attribute).
Um Instanzvariablen zu manipulieren, muss man Instanzmethoden verwenden.

5.2 Fragen zu Klassenmethoden und statischen Methoden

Q4. Was ist der Unterschied zwischen Klassenmethoden und statischen Methoden?

A. Klassenmethoden (@classmethod) nehmen cls und können Klassen variablen manipulieren.
Statische Methoden (@staticmethod) nehmen weder self noch cls und hängen weder von der Klasse noch von der Instanz ab.

Art der MethodeErster ParameterZugriff auf Klassen variablenZugriff auf Instanzvariablen
KlassenmethodeclsMöglichUnmöglich
Statische MethodeKeineUnmöglichUnmöglich

Beispiel (Vergleich)

class Example:
    class_variable = "Klassenvariable"

    @classmethod
    def class_method(cls):
        return f"Wert der Klassenvariable: {cls.class_variable}"

    @staticmethod
    def static_method():
        return "Statische Methode kann Klassen variablen nicht handhaben"

# Klassenmethode
print(Example.class_method())  # Wert der Klassenvariable: Klassenvariable

# Statische Methode
print(Example.static_method())  # Statische Methode kann Klassen variablen nicht handhaben

Q5. Wann sollte man statische Methoden verwenden?

A. Statische Methoden werden verwendet, um allgemeine Funktionen zu definieren, die weder von der Klasse noch von der Instanz abhängen.
Zum Beispiel mathematische Operationen oder Konvertierungen von Datenformaten.

class MathUtils:
    @staticmethod
    def add(a, b):
        return a + b

print(MathUtils.add(3, 7))  # 10

5.3 Praktische Fragen zu Klassenmethoden

Q6. Kann man mit Klassenmethoden Instanzen erstellen?

A.Ja. Klassenmethoden können als Factory-Methoden verwendet werden und sind nützlich, um Instanzen aus externen Daten (z. B. Strings, JSON, Datenbankinformationen) zu erstellen.

class User:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @classmethod
    def from_string(cls, user_data):
        name, age = user_data.split(",")
        return cls(name, int(age))

# Instanz aus String erstellen
user = User.from_string("Satō,30")
print(user.name)  # Satō
print(user.age)   # 30

Q7. Ändert sich die Verwendung von Klassenmethoden je nach Python-Version?

A.Die grundlegende Verwendung ändert sich nicht. In Python 2.x wurde manchmal classmethod() anstelle von @classmethod verwendet, aber ab Python 3.x wird @classmethod empfohlen.

Zusätzlich ist ab Python 3.9 die Verwendung von Typ-Hinweisen (Type Hinting) möglich.

class Sample:
    class_variable: str = "Klassenvariable"

    @classmethod
    def get_class_variable(cls) -> str:
        return cls.class_variable

5.4 Zusammenfassung

Dieser Abschnitt hat häufig gestellte Fragen zu Klassenmethoden und deren Antworten vorgestellt.

Wichtige Punkte

  • Klassenmethoden eignen sich gut zur Verwaltung der gesamten Klasse
  • Von Klassenmethoden aus kann man nicht auf Instanzvariablen zugreifen
  • Den Unterschied zwischen Klassenmethoden und statischen Methoden verstehen und sie angemessen einsetzen
  • Als Factory-Methoden können Instanzen aus Daten erstellt werden
  • Die grundlegende Verwendung ändert sich nicht je nach Python-Version, aber Typ-Hinweise können genutzt werden

6. Zusammenfassung (Vertiefen Sie das Verständnis von Klassenmethoden)

Bisher haben wir die Klassenmethoden in Python von den grundlegenden Konzepten bis zu praktischen Anwendungsmethoden detailliert erklärt.
In diesem Abschnitt werden wir den bisherigen Inhalt Revue passieren und die Punkte zur weiteren Vertiefung des Verständnisses von Klassenmethoden zusammenfassen.

6.1 Zusammenfassung der wichtigsten Punkte der Klassenmethoden

Die wichtigsten Punkte, die wir über Klassenmethoden in Python gelernt haben, sind wie folgt.

Grundlagen der Klassenmethoden

  • @classmethod-Dekorator verwenden, um zu definieren
  • Ersten Parameter als cls nehmen, die gesamte Klasse referenzieren und ändern können
  • Ohne Instanzierung mit Class.method() aufrufen

Praktische Verwendungen von Klassenmethoden

  • Als Factory-Methode nutzen
    → Instanzen aus Strings oder JSON-Daten generieren
  • Verwaltung von Konfigurationswerten oder Klassen-Variablen
    → Wie Config.update_language() die Einstellungen der gesamten App ändern
  • Statusverwaltung der gesamten Klasse
    → Zur Verwaltung der Gesamtzahl von Instanzen oder Versionen nutzen
  • Dynamisches Klassen-Design unter Nutzung der Vererbung
    → Verschiedene Verhaltensweisen für jede Unterklasse ermöglichen

Unterschiede zu Instanzmethoden und statischen Methoden

Art der MethodeDekoratorErster ParameterZugriff auf Klassen-VariablenZugriff auf Instanz-VariablenAufrufmethode
Instanzmethodekeinerselfmöglichmöglichinstance.method()
Klassenmethode@classmethodclsmöglichnicht möglichClass.method() oder instance.method()
Statische Methode@staticmethodkeinernicht möglichnicht möglichClass.method() oder instance.method()

6.2 Fälle, in denen Klassenmethoden verwendet werden sollten

Durch die angemessene Unterscheidung von Klassenmethoden in Python verbessert sich die Lesbarkeit und Wartbarkeit des Codes.
In den folgenden Situationen ist es gut, Klassenmethoden aktiv zu nutzen.

📌Die Erstellungsweise von Instanzen vereinheitlichen wollen→Durch Implementierung von Factory-Methoden wie from_string() ist eine einheitliche Instanzerstellung möglich

📌Methoden zum Manipulieren von Klassen-Variablen erstellen wollen→ Zur Aktualisierung von Einstellungen (Config.update_theme()) etc. nutzen

📌Funktionen der Elternklasse in Unterklassen nutzen wollen→Durch Verwendung von cls funktioniert es angemessen auch in Vererbungsbeziehungen

6.3 Um Klassenmethoden tief zu verstehen

Um das Verständnis von Klassenmethoden weiter zu vertiefen, probieren Sie folgende Methoden aus.

1️⃣Tatsächlich Code schreiben und ausprobieren→ Erstellen Sie eine einfache Klasse mit Klassenmethoden und überprüfen Sie das Verhalten

2️⃣Beispiele der Nutzung in anderen Projekten untersuchen→ In Frameworks wie Django oder Flask werden Klassenmethoden häufig verwendet

3️⃣Im Vergleich zu statischen Methoden und Instanzmethoden nachdenken→ Überlegen Sie bewusst, in welchen Situationen welche Methode angemessen ist, und designen Sie entsprechend

6.4 Zusammenfassung

In diesem Artikel haben wir Klassenmethoden in Python detailliert erklärt.✔ Die Grundlagen und Rollen von Klassenmethoden verstehen✔ Praktische Anwendungsmethoden lernen und in angemessenen Situationen verwenden✔ Die Unterschiede zu Instanzmethoden und statischen Methoden verstehen und die Unterscheidung bewusst machenWenn Sie Klassenmethoden in Python angemessen beherrschen, können Sie effizienteren und wartbareren Code schreiben.
Bitte wenden Sie das Gelernte in Ihren tatsächlichen Programmen an!

年収訴求