什么是静态方法的pythonic? “自我”还是班级本身?

时间:2018-02-09 07:23:55

标签: python python-3.x

假设我有一个类(在python3.6中)

class Testing:

    def __init__(self, stuff):
        self.stuff = stuff

    @staticmethod
    def method_one(number):
        """My staticmethod"""
        return number + 1

    def method_two(self):
        """Other method"""
        number = 10

        # option A
        self.method_one(number)

        # option B
        Testing.method_one(number)

这里有什么更多的python?

  • 选项A,使用self var
  • 选项B,使用类本身

我倾向于认为A,但我不确定,并且找不到关于该主题的可靠答案

2 个答案:

答案 0 :(得分:1)

事实上,在静态方法中使用self效果不佳。因此,当您想要调用静态方法时,可以使用选项B class object

因此,调用其他方法意味着非静态就是策略:
如果两个methods属于同一个班级,您可以使用选项A 中提到的self

选项B (这意味着在method内使用class调用class object),您可以使用想要调用的函数在 另一个类

更新:

对于在同一个类中调用静态方法,除了self之外,您可以使用两种方法。它们更像pythonic。
1.来自课堂的电话:classname.static_method_name()
2.来自实例的电话 这两种方式比self更加pythonic。所以在你的情况下,选项B更加pythonic。

答案 1 :(得分:1)

在静态方法的情况下,我总是更喜欢符号B而不是符号A.主要原因是符号B告诉我一些关于如果使用符号A我不会知道的方法。

如果您使用类名而不是self,那么读者可以立即明白他们正在处理静态方法。这样,读者就知道该方法不使用或更改类或实例状态。如果使用self,则必须检查实际方法以查看是否使用了类或实例状态。