【发布时间】:2017-07-30 16:43:51
【问题描述】:
我越来越熟悉静态方法和类方法,我知道它们之间的区别。但是我今天遇到了一个问题,我想在一个方法中同时引用self 和 cls。
我知道如何做到这一点的唯一方法是创建一个普通的类方法(不是使用@classmethod,而是简单地使用def)并使用它的名称明确调用该类,如下所示:
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
这个例子是哲学的过度简化版本。我想对从串行设备返回的数据调用 clean 或 parse 函数。有没有办法像这样实现 ask 方法?:
def ask(self, message: str) -> str:
return cls.clean_output(self._ser.query(message))
或者我可以像这样明确地用myClass 调用它吗?如果是,程序员什么时候应该使用@classmethod,什么时候可以使用类名本身?是否仅在您期望发生子类化时才真正需要使用 @classmethod 装饰器?
【问题讨论】:
标签: python python-3.x class static-methods class-method