Python 3.4:静态方法只能从实例中调用吗?

Posted

技术标签:

【中文标题】Python 3.4:静态方法只能从实例中调用吗?【英文标题】:Python 3.4 : can static methods only be called from an instance? 【发布时间】:2019-08-27 10:43:18 【问题描述】:

我正在尝试从类中调用 @staticmethod 方法来初始化类变量,如下所示:

class Test:
    @staticmethod
   def get_bit_count():
       return 8
   num = get_bit_count()

但这会立即引发以下错误:TypeError: 'staticmethod' object is not callable

但是,以下代码可以正常工作:

class Test:
    @staticmethod
    def get_bit_count():
        return 8
    num = None
    def __init__(self):
        self.num = self.get_bit_count()

print(Test.get_bit_count())
print(Test().num)

可以调用该方法,变量num 得到正确设置,输出如下:

8
8

但是使用该代码,我现在需要实例化该类。

有没有办法让我在不实例化类的情况下使用Test.num 并获得8 而不是None?我希望通过在方法get_bit_count() 中只有一个变量在我想更新我的代码时进行更改来避免冗余。

【问题讨论】:

【参考方案1】:

静态方法,如staticmethod 的文档中所述,只能在类或实例上调用。

不过,您可以使用普通方法。如果您希望也能够在实例上调用它,只需让它接受任意数量的参数:

class Test:
    def get_bit_count(*args, **kwargs):
        return 8

    num = get_bit_count()


print(Test.num)
# 8

t = Test()
print(t.get_bit_count())
# 8

【讨论】:

以上是关于Python 3.4:静态方法只能从实例中调用吗?的主要内容,如果未能解决你的问题,请参考以下文章

JAVA 静态方法不能访问直接

python3类方法,实例方法和静态方法

一个类中直接调用另一个类的静态方法吗

Python的静态方法和类方法

关于软件构造3.4节的学习总结

python 类方法和静态方法的区别