为什么我们使用@staticmethod?

肯·T

我只是看不到为什么我们需要使用@staticmethod。让我们从一个例子开始。

class test1:
    def __init__(self,value):
        self.value=value

    @staticmethod
    def static_add_one(value):
        return value+1

    @property
    def new_val(self):
        self.value=self.static_add_one(self.value)
        return self.value


a=test1(3)
print(a.new_val) ## >>> 4



class test2:
    def __init__(self,value):
        self.value=value

    def static_add_one(self,value):
        return value+1

    @property
    def new_val(self):
        self.value=self.static_add_one(self.value)
        return self.value


b=test2(3)
print(b.new_val) ## >>> 4

在上面的示例static_add_one中,两个类中的方法,在计算中不需要类(自身)的实例。

static_add_one该类中的方法test1由装饰@staticmethod并且可以正常工作。

但是,与此同时,没有修饰static_add_one的类中的方法也可以通过使用在参数中提供a但完全不使用的技巧来正常工作test2@staticmethodself

那么使用的好处是@staticmethod什么?它会提高性能吗?还是仅仅是因为python的禅宗指出“显式优于隐式”?

布伦·巴恩

使用的原因staticmethod是,如果您有一些可以作为独立函数编写的东西(不属于任何类的一部分),但是您希望将其保留在类中,因为它在某种意义上与类相关。(例如,它可能是一个不需要类信息的函数,但是其行为特定于类,因此子类可能希望覆盖它。)在许多情况下,它可能同样有意义将某些内容作为独立函数而不是静态方法编写。

您的示例并不完全相同。一个关键的区别是,即使您不使用它self,您仍然需要一个实例来调用static_add_one---您不能使用来在类上直接调用它test2.static_add_one(1)因此,那里的行为存在真正的差异。对静态方法最严重的“竞争”不是忽略的常规方法self,而是独立的函数。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Java

为什么我们应该使用的的Mockito wiremock

来自分类Java

为什么我们使用ViewTreeObserver#addOnGlobalLayoutListener()

来自分类Javascript

为什么我们应该使用RxJs of()函数?

来自分类Javascript

为什么我们需要使用flatMap?

来自分类Java

为什么我们使用finally块?

来自分类Java

为什么我们使用web.xml?

来自分类Javascript

为什么我们在jQuery中使用“({})”?

来自分类Java

为什么我们在休眠中使用@Embeddable

来自分类Java

为什么我们在Java中使用clone()方法?

来自分类Java

我们为什么使用@Autowire

来自分类Java

为什么我们使用抽象

来自分类Dev

为什么我们使用TaskStackBuilder?

来自分类Dev

为什么我们使用volatile关键字?

来自分类Dev

为什么我们使用setLayoutParams?

来自分类Dev

在OCaml中,我们为什么有'+。','-。' 但是我们仅使用“ <”而不是“ <。”?

来自分类Dev

为什么我们使用SASS,甚至我们也在使用SCSS?

来自分类Dev

为什么我们使用()=> []而不是[]?

来自分类Dev

为什么我们为glfwCreateWindow使用指针?-OpenGL

来自分类Dev

为什么我们使用WebDriver而不是Selenium IDE?

来自分类Dev

为什么我们使用>>从RGB获取颜色值?

来自分类Dev

我们为什么要使用lua_pushinteger()?

来自分类Dev

为什么我们要使用argv [2] [0]

来自分类Dev

为什么我们使用 try,除了在 Python 中

来自分类Dev

为什么我们使用扩展?

来自分类Dev

为什么我们使用 promise 而不是 if/then 语句?

来自分类Dev

为什么我们需要使用标记接口?

来自分类Dev

为什么我们使用“NULL”?

来自分类Dev

为什么我们在 python 类中使用 super()?

来自分类Dev

为什么我们使用 argc -1?

Related 相关文章

热门标签

归档