Er statiske klassevariabler mulig i Python?
Er det mulig å ha statiske klassevariabler eller metoder i Python? Hvilken syntaks kreves for å gjøre dette?
1797
3
Er det mulig å ha statiske klassevariabler eller metoder i Python? Hvilken syntaks kreves for å gjøre dette?
Variabler som er deklarert inne i klassedefinisjonen, men ikke inne i en metode, er klassevariabler eller statiske variabler:
Som @millerdev påpeker, oppretter dette en
i
-variabel på klassenivå, men dette er forskjellig fra en hvilken som helsti
-variabel på instansnivå, så du kan haDette er forskjellig fra C++ og Java, men ikke så forskjellig fra C#, der et statisk medlem ikke kan nås ved hjelp av en referanse til en forekomst.
Se hva Python-opplæringen har å si om klasser og klasseobjekter.
@Steve Johnson har allerede svart angående statiske metoder, også dokumentert under "Innebygde funksjoner" i Python Library Reference.
@beidy anbefaler classmethods over staticmethod, da metoden deretter mottar klassetypen som første argument, men jeg er fortsatt litt uklar på fordelene med denne tilnærmingen i forhold til staticmethod. Hvis du også er det, så spiller det sannsynligvis ingen rolle.
Personlig ville jeg bruke en classmethod når jeg trengte en statisk metode. Hovedsakelig fordi jeg får klassen som et argument.
eller bruke en dekoratør
For statiske egenskaper .. Det er på tide at du slår opp noen python-definisjoner ... variabler kan alltid endres. Det er to typer av dem foranderlige og uforanderlige... Det er også klasseattributter og forekomstattributter ... Ingenting virkelig som statiske attributter i betydningen java og c ++ ...
Hvorfor bruke statisk metode i pytonisk forstand, hvis den ikke har noen som helst relasjon til klassen! Hvis jeg var deg, ville jeg enten brukt classmethod eller definert metoden uavhengig av klassen.
Statiske metoder i python kalles classmethods. Ta en titt på følgende kode
Legg merke til at når vi kaller metoden myInstanceMethod, får vi en feil. Dette er fordi den krever at metoden kalles på en instans av denne klassen. Metoden myStaticMethod er satt som en classmethod ved hjelp av decorator @classmethod.
Bare for moro skyld kan vi kalle myInstanceMethod på klassen ved å sende inn en instans av klassen, slik: