使用类名调用静态方法 - 好还是坏?

时间:2017-03-09 15:50:23

标签: python python-3.x class static-methods class-method

我越来越熟悉静态方法和类方法,我知道每个方法之间的区别。但是今天我遇到了一个问题,我想在方法中引用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

这个例子是哲学的过度简化版本。我想对我回来的数据调用一个干净或解析函数,就像从串行设备那样。有没有办法像这样实现ask方法?:

    def ask(self, message: str) -> str:
        return cls.clean_output(self._ser.query(message))

或者我可以明确地使用myClass来调用它吗?如果是,程序员何时应该使用@classmethod,何时允许使用类名本身?当您期望进行子类化时,是否真的只需要使用@classmethod装饰器?

1 个答案:

答案 0 :(得分:3)

只需在self上调用静态方法:

def ask(self, message: str) -> str:
    return self.clean_output(self._ser.query(message))

也有。

类上的属性也总是在实例上可用(前提是实例本身没有属性,屏蔽它的名称相同)。方法(无论是常规方法,静态方法还是类方法)也不例外,它们也只是属性。他们的约束行为在这里并不重要。