Heim  >  Artikel  >  Backend-Entwicklung  >  Für Anfänger, wie man @classmethod und @staticmethod versteht

Für Anfänger, wie man @classmethod und @staticmethod versteht

anonymity
anonymityOriginal
2019-05-27 11:09:313016Durchsuche

Die statische Methode entspricht einer in einer Klasse definierten Funktion. Wenn sich eine Methode also weder auf eine Instanz noch auf eine bestimmte Klasse bezieht, wird empfohlen, sie als statische Methode zu definieren. Dadurch wird der Code nicht nur klarer Blick, sondern erleichtert auch die Wartung des Codes.

Der Parameter, der implizit an die aufrufende Methode der Unterklasse übergeben wird, ist die dem Objekt entsprechende Klasse, und die Klassenvariable der entsprechenden Klasse wird während des Aufrufvorgangs dynamisch generiert.

Für Anfänger, wie man @classmethod und @staticmethod versteht

Verstehen Sie, dass die Klassen „classicmethod“ und „staticmethod“ eine Datenstruktur sind, die Objekte erstellen kann. Beim Aufruf einer Klasse wird ein Instanzobjekt der Klasse erstellt. Sobald das Objekt erstellt ist, prüft Python, ob die init()-Methode implementiert ist. Wenn init() implementiert wurde, wird es aufgerufen und das Instanzobjekt als ersten Parameter (self) übergeben.

Definieren Sie beispielsweise eine Klasse Date, die Datumsinformationen speichert, und die Initialisierungsfunktion wird hier neu definiert.

class Date(object):
 
    day = 0
    month = 0
    year = 0
 
    def __init__(self, day=0, month=0, year=0):
        self.day = day
        self.month = month
        self.year = year
    def tellDate(self):
        print 'Today is %s-%s-%s'%(self.day,self.month,self.year)

Wenn wir die Methode „tell Date“ aufrufen müssen, müssen wir zuerst eine Instanz erstellen oder Date().tellDate() verwenden

date1 = Date()
date1.tellDate()

So rufen Sie die Funktion direkt mit dem Klassennamen auf ?

Sie können @classmethod oder @staticmethod verwenden, um den Klassennamen aufzurufen. Methodenname () ruft die Funktion auf

Nehmen Sie nun an, dass wir viele Datumsinstanzen erstellen müssen und die Datumsinformationen übergeben werden von außen in Form einer Zeichenfolge ein, das Format ist „TT-MM-JJJJ“. Was muss getan werden

Analysieren Sie die Datumsinformationszeichenfolge in ein Tupel mit drei Variablen: Jahr, Monat und Tag

Übergeben Sie beim Instanziieren eines Date-Objekts das Jahr, den Monat und den Tag als Parameter.

So:

day, month, year = map(int, string_date.split('-'))
date1 = Date(day, month, year)

Python kann nicht wie C++ überladen werden, daher führen wir die Klassenmethode ein, die keinen self-Parameter erfordert, aber erfordert, dass der erste Parameter cls ist, der seine eigene Klasse darstellt Parameter.

@classmethod
    def from_string(cls, date_as_string):
        day, month, year = map(int, date_as_string.split('-'))
        date1 = cls(day, month, year)
        return date1

Sie können den Klassennamen Methodennamen () direkt verwenden

Die Vorteile einer solchen Programmierung sind:

Die String-Zerlegungsoperation kann wiederverwendet werden, und zwar nur muss den Parameter einmal übergeben;

OOP; weil es sich um die Klasse selbst handelt, nicht um eine Instanz der Klasse. Wenn wir Date als übergeordnete Klasse verwenden, haben ihre Unterklassen auch den from_string Methode

Der Klassenmethode sehr ähnlich, ist die statische Methode, aber sie erfordert nicht, dass self ihr eigenes Objekt und cls-Parameter ihrer eigenen Klasse darstellt, genau wie bei der Verwendung einer Funktion.

@staticmethod
    def is_date_valid(date_as_string):
        day, month, year = map(int, date_as_string.split('-'))
        return day <= 31 and month <= 12 and year <= 3999

Alle Programme und Laufergebnisse

class Date(object):
    day = 0
    month = 0
    year = 0
 
    def __init__(self, day=0, month=0, year=0):
        self.day = day
        self.month = month
        self.year = year
        
    def tellDate(self):
        print 'Today is %s-%s-%s'%(self.day,self.month,self.year)
    @classmethod
    def from_string(cls, date_as_string):
        day, month, year = map(int, date_as_string.split('-'))
        date = cls(day, month, year)
        return date
 
    @staticmethod
    def is_date_valid(date_as_string):
        day, month, year = map(int, date_as_string.split(&#39;-&#39;))
        return day <= 31 and month <= 12 and year <= 3999
 
if __name__ == '__main__':
    date1 = Date()
    date1.tellDate()
    date2 = Date.from_string("14-04-2016")
    date2.tellDate()
    print Date.is_date_valid("14-04-2016")

Die Laufergebnisse sind:

Today is 0-0-0
Today is 14-4-2016
True

Das obige ist der detaillierte Inhalt vonFür Anfänger, wie man @classmethod und @staticmethod versteht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn