对于我当前的项目,我定义了许多类,每个类都用许多输入进行初始化。与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()有哪些陷阱?这似乎工作得很好,但我从与我一起工作的程序员那里,以及从其他线程上的一些评论中,发现了一些不安(如果必须的话,就这样做)。然而,没有人能够明确地告诉我什么会出错,或者说什么会让他们不安。所以。。。怎么了?你知道吗
Python#2的禅宗:“显式比隐式好。”
Python#3的禅宗:“简单胜于复杂。”
Python的禅宗7:“可读性很重要。”
在您的代码示例中,使用显式方式,和可以得到同样多的代码行的结果,这将更易于理解和维护。你知道吗
所以:您的代码片段在技术上没有什么问题,但是您正在用三个重要的Python值(显式、简单和可读)来换取。。。好吧,到底是为了什么?为最复杂的情况编写几行代码?你知道吗
现在,在某些上下文中,这样的解决方案可能是有意义的(想到ORM“model”基类),但是您可能会使用
**kwargs
而不是命名的args和locals()
。你知道吗相关问题 更多 >
编程相关推荐