首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的函数封装效率

Python中的函数封装效率
EN

Stack Overflow用户
提问于 2017-01-12 12:59:59
回答 1查看 65关注 0票数 0

我有大量的对象,我需要能够对每个对象做一些复杂的事情,所以我有一些相当长的函数。

一般来说,将长函数放入实际用于它们的类(GreatObject,下面)以进行适当的封装是更好,还是将一个函数放在集合类中(GreatSet,它只有一个实例)是否更好?

代码语言:javascript
复制
class GreatSet(object):
    def __init__(self):
        self.great_set = [] # Will contain a lot of GreatObjects.

    def long_method(self, great_object): # Is this function better here?
        [Many lines of code]

class GreatObject(object):
    def __init__(self, params):
        self.params = params

    def.long_method(self): # Or here?
        [Many lines of code]

我正在使用Python2.7。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-12 13:40:56

在这两种情况下,long_method都属于它的类(每个类只有一个long_method函数,由所有实例共享),在这两种情况下,查找obj.long_method都会为每次查找创建一个新的Method实例,所以wrt/“效率”(不管它的意思是什么)不会有任何区别。此外,除非您需要最大的时间和空间性能--在这种情况下,低级语言可能是最好的选择--您确实应该更关心正确的设计和可维护性,而不是最大的原始性能。

因此,如果long_method应该在GreatObject上工作,那么它可能属于GreatObject,但它取决于这些类各自的响应性、long_method真正做什么以及long_methodGreatObjectGreatSet属于哪个应用层。例如,如果GreatObjectGreatSet都属于域模型,而long_method做与表示相关的事情,那么显然long_method既不属于GreatObject,也不属于GreatSet

最后,正如PartialOrder在他的评论中提到的那样,“长”函数通常是一种代码/设计气味。有时,函数必须“足够长”,因为它做了一些复杂的事情--即使这样,通常也可以将其重构为较小的函数(如果这些函数需要共享状态,最终可以重构为不同类的方法) -,但通常长函数意味着它只是做了太多的事情。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41613901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档