您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python类设计(staticmethod与方法)

python类设计(staticmethod与方法)

方法类型的选择取决于其他因素。

你有两种情况。第一种情况是该方法必须是类接口的一部分- 例如它必须由用户调用,或者必须在子类中可重写,或者它使用自身的信息,或者可能在将来的版本中您可能需要其中的任何软件。

在第一种情况下,您通常会使用普通方法(即方法与实例相关而不与类相关)或classmethod(当方法与类相关时(例如,它是替代构造函数),发现方法功能等)。在这两种情况下,staticmethod如果方法没有使用来自类/实例的信息,则可以使用a ,但是这样做不会带来任何好处。而且这也将破坏您的工作能力,而cls.method(instance, *args)这已经是一无所获。

第二种情况是该方法无论如何都不是类的一部分。那么通常建议使用一个函数- 该方法并不是接口的真正组成部分,因此它在那里没有位置。除非您想在子类中覆盖树/货币计算器,否则您的示例似乎就是这种情况,但这在很大程度上取决于您对其进行的操作。

私有方法一个特殊的情况- 即使您的方法与类没有真正的关系,您也可能想使用它,私有方法不是接口的一部分,因此放置它们的位置无关紧要。使用staticmethod静止不会带来很多好处,但是也没有任何理由不使用它。

实际上,有一种情况staticmethod非常有用-在类中添加外部函数(或其他对象)时。

class Foo(object):
     trees2money = staticmethod(calculators.trees2money)
     foo = staticmethod(calculators.bar)

但是,当您有一个静态的类定义时,这并不是很好,因为您始终可以执行以下操作。

class Foo(object):
     def trees2money(self, trees):
         """Calculator for trees2money, you can override when subclassing"""
         return calculators.trees2money(trees)
     @property
     def foo(self):
         """The foo of the object"""
         return calculators.bar

这使您更好地了解这些对象在阅读源代码时会做什么,甚至还可以添加文档。但是,当您动态构建类或将它们添加元类中时,它可能仍然派上用场(手动创建包装方法不是很方便)。

python 2022/1/1 18:46:47 有314人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶