Er statiske klassevariabler mulige i Python?
Er det muligt at have statiske klassevariabler eller metoder i Python? Hvilken syntaks er nødvendig for at gøre dette?
1797
3
Er det muligt at have statiske klassevariabler eller metoder i Python? Hvilken syntaks er nødvendig for at gøre dette?
Variabler, der er deklareret i klassedefinitionen, men ikke i en metode, er klasse- eller statiske variabler:
Som @millerdev påpeger, skaber dette en
i
-variabel på klasseniveau, men dette er forskelligt fra enhveri
-variabel på instansniveau, så du kunne haveDette er forskelligt fra C++ og Java, men ikke så forskelligt fra C#, hvor et statisk medlem ikke kan tilgås ved hjælp af en reference til en instans.
Se hvad Python-tutorials har at sige om klasser og klasseobjekter.
@Steve Johnson har allerede svaret vedrørende statiske metoder, som også er dokumenteret under "Built-in Functions" i Python Library Reference.
@beidy anbefaler classmethods frem for staticmethod, da metoden så modtager klassetypen som det første argument, men jeg er stadig lidt usikker på fordelene ved denne fremgangsmåde frem for staticmethod. Hvis du også er det, så er det nok ligegyldigt.
Personligt ville jeg bruge en classmethod, når jeg havde brug for en statisk metode. Hovedsageligt fordi jeg får klassen som et argument.
eller bruge en decorator
For statiske egenskaber.. Det er på tide at du slår op nogle python definition... variabel kan altid ændre sig. Der er to typer af dem mutable og immutable.. Der er også klasseattributter og instansattributter... Der er ikke rigtig noget der ligner statiske attributter i den forstand som i java & c++
Hvorfor bruge statiske metoder i pythisk forstand, hvis de ikke har nogen som helst relation til klassen? Hvis jeg var dig, ville jeg enten bruge classmethod eller definere metoden uafhængigt af klassen.
Statiske metoder i python kaldes classmethods. Tag et kig på følgende kode
Bemærk, at når vi kalder metoden myInstanceMethod, får vi en fejl. Det skyldes, at det kræver, at metoden skal kaldes på en instans af denne klasse. Metoden myStaticMethod er indstillet som en classmethod ved hjælp af decorator @classmethod.
Bare for sjov og ballade kunne vi kalde myInstanceMethod på klassen ved at overgive en instans af klassen på denne måde: