繁体   English   中英

使用类方法包装 class 函数,但不作为替代构造函数

[英]Using a classmethod to wrap class functions, but not as an alternate constructor

我已经习惯使用类方法来包装 class 函数,而不是作为替代构造函数。 将所有相关函数保留在 class 命名空间中而不是在通用命名空间中定义包装器 function 似乎很棒。 有人告诉我这是不合常规的,我在其他地方还没有看到这种模式。 为什么模式 B 比模式 A 更可取?

简单的例子:

模式A(我的模式):

class Foo():
  def __init__(self, bar):
    self.bar = bar

  def baz(self):
    print(self.bar)

  @classmethod
  def foobaz(cls, bar):
    foo = cls(bar)
    foo.baz()

模式 B(正常模式):

class Foo():
  def __init__(self, bar):
    self.bar = bar

  def baz(self):
    print(self.bar)

def foobaz(bar):
    foo = Foo(bar)
    foo.baz()

“unpythonic”是相当主观的(在大多数情况下:-))。 尽管我自己在大多数地方都选择使用 function 模式 - 在某些项目中,甚至在大型项目的某些部分,更喜欢根据需要使用 class 命名空间可能是有意义的。

也就是说,没有什么不符合你的模式。 如果它确实重要的话,十多年来我一直在讲授“我认为 Pythonic 和不符合 Pythonic 的东西”。

就执行时间而言,在直接的 function 上使用“classmethod”可能会有一点开销,但它会“比可忽略不计低两个数量级”。

在文档方面,看起来将您的方法作为类方法也更有意义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM