Zijn statische klassevariabelen mogelijk in Python?
Is het mogelijk om statische klassevariabelen of -methoden te hebben in Python? Welke syntaxis is nodig om dit te doen?
1797
3
Is het mogelijk om statische klassevariabelen of -methoden te hebben in Python? Welke syntaxis is nodig om dit te doen?
Variabelen die in de definitie van de klasse worden gedeclareerd, maar niet in een methode, zijn klasse- of statische variabelen:
Zoals @millerdev opmerkt, creëert dit een
i
variabele op klassenniveau, maar dit is verschillend van eeni
variabele op instantie-niveau, dus je zouDit is anders dan in C++ en Java, maar niet zo anders dan in C#, waar een static member niet kan worden benaderd met een verwijzing naar een instantie.
Zie wat de Python-tutorial te zeggen heeft over het onderwerp klassen en klasse-objecten.
@Steve Johnson heeft al geantwoord met betrekking tot static methods, ook gedocumenteerd onder "Built-in Functions" in the Python Library Reference.
@beidy beveelt classmethods aan boven staticmethod, omdat de methode dan het klassetype als eerste argument krijgt, maar ik'ben nog een beetje vaag over de voordelen van deze aanpak boven staticmethod. Als jij dat ook bent, dan maakt het waarschijnlijk'niet uit.
Persoonlijk zou ik een klassemethode gebruiken wanneer ik een statische methode nodig heb. Voornamelijk omdat ik de klasse als argument krijg.
of gebruik een decorator
Voor statische eigenschappen.. Het wordt tijd dat je wat python definities opzoekt... Variabele kunnen altijd veranderen. Er zijn twee soorten: veranderlijk en onveranderlijk. Ook zijn er klasse attributen en instantie attributen... Niets echt zoals statische attributen in de zin van java & c++
Waarom static method gebruiken in pythonische zin, als het geen enkele relatie heeft met de klasse! Als ik jou was, zou ik ofwel classmethod gebruiken of de methode onafhankelijk van de klasse definiëren.
Statische methodes in python worden klassemethodes genoemd. Kijk eens naar de volgende code
Merk op dat wanneer we de methode myInstanceMethod aanroepen, we een foutmelding krijgen. Dit komt omdat de methode moet worden aangeroepen op een instantie van deze klasse. De methode myStaticMethod is ingesteld als een klassemethode met behulp van de decorator @klassemethode.
Voor de grap zouden we myInstanceMethod op de klasse kunnen aanroepen door een instantie van de klasse door te geven, zoals dit: