在Python中访问类中的静态方法的惯用方法



我理解静态方法应该总是由它们所属的类名来引用。但是我看到它们也可以通过关键字self来访问。

这有点令人困惑,我没有看到解释器抛出错误。

import unittest
class TestA(unittest.TestCase):
    @staticmethod
    def fun1():
        return True
    @staticmethod
    def fun2():
        return False
    def test_one(self):
        assert TestA.fun1() == True
    def test_two(self):
        assert self.fun2() == False
if __name__ == '__main__':
    unittest.main()

访问静态方法的正确方法是什么?就像上面的TestA.fun1,我很清楚,或者self.fun2,有点担心,因为没有实例发送到fun2。

两种方法都是可以接受的,如文档中所述:

可以在类(如C.f())上调用,也可以在实例(如C().f())上调用。该实例被忽略,除了它的类。

在某种意义上,静态方法的意义在于允许您调用该方法,而不必担心您是在实例上还是在类上调用它。

两种方法都"有效",但如果可能的话,应该使用实例调用。这允许它在创建TestA子类的情况下正常工作。也就是说,它将正确地找到"self"类型的静态方法的实现,而不是硬编码的TestA。如果您处于具有"cls"变量(例如类方法或工厂函数)的上下文中,则应该调用该变量。只有当你总是想调用TestA实现时,你才会直接命名类对象,特别是当你在局部作用域中没有self或cls引用时。

最新更新