gpt4 book ai didi

python - @staticmethod 或类外函数?

转载 作者:太空狗 更新时间:2023-10-29 20:21:01 29 4
gpt4 key购买 nike

假设我有一个 class这需要一个函数(或者我应该说方法)是:

  • 独立于我的class实例 - 不需要 self争论;
  • 仅在我的 class 中被调用对象
  • 我在任何时候都不需要访问它(例如覆盖它);

我应该 (A) 将它放在 class 中吗?并将其标记为 @staticmethod或者我 (B) 应该在我的 class 之外定义它吗?对象(但在同一个命名空间中)?为什么?

例子:

class A:
def __init__(self, my_int):
self.my_int = my_int
def my_int_and_4(self):
print(self.adder(self.my_int,4))
@staticmethod
def adder(a,b):
return a+b

def adder(a,b):
return a+b
class B:
def __init__(self, my_int):
self.my_int = my_int
def my_int_and_4(self):
print(adder(self.my_int,4))

编辑:也许这个例子有点过于简单了。我应该补充一点,我的“adder”版本专门用于我的class。没有其他情况。

最佳答案

这是私有(private)静态方法的教科书用例。

这里的关键点是您应该将其设为该类的私有(private)方法。这样你就可以确定没有其他东西会使用它并依赖于它的实现。您将来可以自由更改它,甚至删除它,而不会破坏该类之外的任何内容。

是的,让它成为静态的,因为你可以。

在 Python 中,没有办法使方法真正私有(private),但按照惯例,在方法名称前加上 _ 意味着它应该被视为私有(private)。

    @staticmethod
def _adder(a,b): ## <-- note the _
return a+b

如果在某些时候你突然需要在课外使用它,那么暴露它一点也不麻烦,例如使用公共(public)包装器方法。

然而,反之则不然。一旦暴露,就很难收回这种暴露。

关于python - @staticmethod 或类外函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47381909/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com