Ich bin mehr und mehr vertraut mit statischen Methoden und Klassenmethoden und ich kenne den Unterschied zwischen jedem. Aber ich bin heute auf ein Problem gestoßen, wo ich sowohl auf self
als auch aufcls
in einer Methode verweisen möchte.Aufruf der statischen Methode mit dem Klassennamen - Gut oder Schlecht?
Der einzige Weg, ich weiß, wie dies zu tun ist, ein normales Klassenmethode (mit @classmethod
, nicht mit def
sondern einfach) zu machen und der Klasse ruft damit explizit wie Name ist so:
class myClass:
def __init__():
self._ser.connect('COM5')
def ask(self, message: str) -> str:
return myClass.clean_output(self._ser.query(message))
@staticmethod
def clean_output(dirty_string: str):
clean_string = dirty_string.strip().replace(chr(4))
return clean_string
Dieses Beispiel ist eine über vereinfachte Version der Philosophie. Ich möchte eine saubere oder analysierende Funktion für Daten aufrufen, die ich zurückbekomme, wie von einem seriellen Gerät. Gibt es eine Möglichkeit die fragen Verfahren wie so ?:
def ask(self, message: str) -> str:
return cls.clean_output(self._ser.query(message))
umzusetzen Oder ist es in Ordnung, dass ich es mit myClass
ausdrücklich so bin Aufruf? Wenn ja, wann sollten Programmierer @classmethod
verwenden und wann darf der Klassenname selbst verwendet werden? Wird der Dekorator @classmethod
nur dann wirklich benötigt, wenn Sie erwarten, dass Unterklassen eintreten?
Ah meine Güte ... Das war zu einfach. Danke dafür. Werden diese Informationen irgendwo veröffentlicht? Ich schaute, aber vielleicht habe ich Google nicht die richtige Frage gestellt. Es macht durchaus Sinn, dass Instanzen auch Klassenmethoden haben. Do! – boymeetscode
@boymeetscode: Ich habe hinzugefügt, warum sie zur Verfügung stehen; static Objekte sind hier nicht besonders, so wird es keine spezielle Dokumentation dort zu zeigen sein. :-) –