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

马修雷诺德菲特

我试图@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,并得到8None无实例化类?我希望这样做是为了避免冗余,因为get_bit_count()当我希望更新我的代码时,方法中只有一个变量要更改。

蒂埃里·拉蒂耶

静态方法,如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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python 3:我们可以在调用实例的几种方法时避免重复实例名称吗?

来自分类Dev

从实例方法线程调用静态方法安全吗?

来自分类Dev

如何在Python 3中区分实例方法,类方法,静态方法或函数?

来自分类Dev

监督python 3吗?

来自分类Dev

我只能调用一次定义:Python 3

来自分类Dev

在Python中的静态方法中调用实例方法

来自分类Dev

Java:确定是从实例还是静态调用静态方法

来自分类Dev

从类方法调用实例方法,在python3中允许,在python 2中不允许?

来自分类Dev

Python实例方法与静态方法

来自分类Dev

Python 3的tox调用失败

来自分类Dev

图Python 3兼容吗?

来自分类Dev

Python3绑定方法

来自分类Dev

从实例属性动态继承所有Python魔术方法

来自分类Dev

Android的onProgressUpdate只能调用静态方法吗?

来自分类Dev

从QPushButton调用Python3 PyQt4

来自分类Dev

调用Python静态方法对象

来自分类Dev

命令python3是py -3的OS X变体吗?

来自分类Dev

Python 3:使str对象可调用

来自分类Dev

在Python 3中不调用地图

来自分类Dev

在python3中调用tcl proc

来自分类Dev

Python3 folium:无法调用ImageOverlay

来自分类Dev

在Python3中覆盖__repr __()吗?

来自分类Dev

终端上的Python 3与Shell不同吗?

来自分类Dev

comtypes 与 Python3 兼容吗?

来自分类Dev

python中[:,3]和[:,3:4]之间的区别?

来自分类Dev

您只能从Django / Python图片库中引用一个吗?

来自分类Dev

PyQt4 on Mavericks with python 3

来自分类Dev

Python 3,4 getattr无效语法

来自分类Dev

Python 2和Python 3在浮点上的行为不同吗?