Je deviens de plus en plus familier avec les méthodes statiques et les méthodes de classe et je connais la différence entre chacune. Mais je suis tombé sur un problème aujourd'hui où j'aimerais un peu référencer à la fois self
et cls
dans une méthode.
La seule façon que je connaisse pour accomplir cela est de faire une méthode de classe normale (non avec @classmethod
, mais simplement avec def
) et d'appeler la classe avec son nom explicitement comme ceci :
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
Cet exemple est une version simplifiée de la philosophie. J'aimerais appeler une fonction de nettoyage ou d'analyse sur les données que je reçois, par exemple d'un appareil série. Y a-t-il un moyen de mettre en œuvre la méthode ask comme ceci ? :
def ask(self, message: str) -> str:
return cls.clean_output(self._ser.query(message))
Ou est-ce correct que je l'appelle avec myClass
explicitement comme ça ? Si c'est le cas, quand les programmeurs devraient-ils utiliser @classmethod
et quand est-il permis d'utiliser le nom de la classe lui-même ? Est-ce que l'utilisation du décorateur @classmethod
est vraiment nécessaire lorsque vous vous attendez à ce que l'héritage se produise ?