使用python locals()设置类属性有什么问题?

2024-04-25 17:59:06 发布

您现在位置:Python中文网/ 问答频道 /正文

对于我当前的项目,我定义了许多类,每个类都用许多输入进行初始化。与this post非常相似,我希望将每个输入设置为类属性,但我希望避免单独设置每个属性。我意识到有几种方法可以做到这一点;我更喜欢的方法是:

class foo(object):
  def __init__(self,a=1,b=2,c=2):
    inpt = locals()
    for k,v in inpt.items():
      if not k in ('self',):
        setattr(self,k,v)

我的问题是:以这种方式使用locals()有哪些陷阱?这似乎工作得很好,但我从与我一起工作的程序员那里,以及从其他线程上的一些评论中,发现了一些不安(如果必须的话,就这样做)。然而,没有人能够明确地告诉我什么会出错,或者说什么会让他们不安。所以。。。怎么了?你知道吗


Tags: 项目方法inself属性定义objectfoo
1条回答
网友
1楼 · 发布于 2024-04-25 17:59:06

Python#2的禅宗:“显式比隐式好。”

Python#3的禅宗:“简单胜于复杂。”

Python的禅宗7:“可读性很重要。”

在您的代码示例中,使用显式方式,可以得到同样多的代码行的结果,这将更易于理解和维护。你知道吗

所以:您的代码片段在技术上没有什么问题,但是您正在用三个重要的Python值(显式、简单和可读)来换取。。。好吧,到底是为了什么?为最复杂的情况编写几行代码?你知道吗

现在,在某些上下文中,这样的解决方案可能是有意义的(想到ORM“model”基类),但是您可能会使用**kwargs而不是命名的args和locals()。你知道吗

相关问题 更多 >