首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果我到处都在处理字典,我应该让它们成为"classes“吗?

如果我到处都在处理字典,我应该让它们成为"classes“吗?
EN

Stack Overflow用户
提问于 2011-07-17 05:44:31
回答 6查看 211关注 0票数 2

现在,我有很多python文件。每一个都有很多功能。

我到处都在传递散列映射。基本字典,以单词作为关键字,分数作为值。

代码语言:javascript
运行
复制
{ 'dog': 33, 'cat': 294 }

我还做了一些更复杂的结构,比如:

代码语言:javascript
运行
复制
{ 'dog': [ 33, 66, 11, 88 ], 'cat': [11, 66, 22] }

我需要把这些东西变成我自己的“对象”吗?如果是这样,它们会是什么呢?我不太做面向对象的编程,所以我问一些新手的问题。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-07-17 06:30:25

多年来,我一直维护着大量的代码库,这些代码库更偏爱原始字典而不是对象,我的观点是,如果这个代码库将由A)另一个人或B)几个人维护,您应该开始迁移到真正的类和OOP。首先,通过查看源代码甚至交互地使用dir()和其他自检技术,您可以很容易地看到一个类实例应该具有哪些属性,这使得您的代码更易于学习、修改和维护。对于具有直观名称、定义良好的属性、文档和可读源代码的类,理解和调试要容易得多,而不是一大堆函数,这些函数将字典作为参数,并在运行时以各种方式转换它们,只有阅读整个代码库才能理解。当涉及到类时,Tracebacks通常也更容易阅读和破译,因为您不会得到通用的低级错误消息。

作为进一步的证据,去看看成熟和成功的python项目。您将看到许多OOP、类和文档。原始字典、列表、集合和元组在适当的时候(您的数据确实很简单)和小型项目和脚本都很好,但可维护性不会超过一定的项目大小。"X只是一个字典“的概念只有在你对X的概念极其简单的情况下才能存在。

票数 4
EN

Stack Overflow用户

发布于 2011-07-17 06:12:53

根据你到底在做什么,namedTuple可能是你的问题的最佳解决方案。没有足够的信息可以确定。

票数 3
EN

Stack Overflow用户

发布于 2011-07-17 06:56:41

我的经验法则是,如果你有作用于字典的函数,那么它可能应该是一个类,而那些函数应该是方法。

作为一名(主要是前任)-perl程序员,传递上述风格是非常熟悉的。然而,Python面向对象工具要轻量级得多,值得尽早部署。

例如

代码语言:javascript
运行
复制
{ 'dog': 33, 'cat': 294 }

变成类似这样的东西

代码语言:javascript
运行
复制
class AnimalCount(object):
    """Some useful documentation you didn't have a place for before"""
    def __init__(self, dog=0, cat=0):
        self.dog = dog
        self.cat = cat
    def add_cat(self):
        self.cat += 1
    def add_dog(self):
        self.dog += 1
    def dog_eats_cat(self):
        self.cat -= 1
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6720440

复制
相关文章

相似问题

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