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

问题描述 投票:0回答:1

我试图从类中调用@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()中只有一个变量可以改变。

python-3.x static-methods python-decorators
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.