栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

python类设计(staticmethod与方法)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/516973.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号