Voorbeeld:
class MyClass: def instance_method(self): print(f"Instantie: {self}") @classmethod def class_method(cls): print(f"Klasse: {cls.__name__}") @staticmethod def static_method(): print("Gewone functie") obj = MyClass() obj.instance_method() # self is obj MyClass.class_method() # cls is MyClass MyClass.static_method() # geen self/cls
Veelgestelde vraag:
Kan een klasse-methode via een instantie worden aangeroepen? Wat is het verschil met aanroepen via de klasse zelf?
Antwoord: Ja, een klasse-methode kan zowel via een instantie als via de klasse zelf worden aangeroepen. Het maakt niet uit waar de aanroep vandaan komt — het eerste argument is altijd de klasse en niet de instantie. Bij aanroepen via de instantie wordt zijn klasse als cls doorgegeven.
Verhaal
In het project zijn alle fabrieksmethoden statisch gemaakt (@staticmethod), maar van binnenuit moest de naam van de subklasse worden verkregen — dat bleek onmogelijk. Gepubliceerd naar @classmethod om de cls-verwijzing te krijgen.
Verhaal
Voor het genereren van unieke ID's voor instanties werd een gewone methode (self) gebruikt, terwijl het een klasse-methode had moeten zijn, omdat de teller gemeenschappelijk moet zijn voor de klasse en niet voor elk object.
Verhaal
Een ontwikkelaar plaatste bedrijfslogica, die niet gerelateerd was aan de klasse, in een statische methode binnen de klasse. Anderen konden deze functie niet vinden, omdat ze deze niet in de ruimte van een andere klasse verwachtten, wat het onderhoud bemoeilijkte.