我有这个代码:
def __init__(self,a,b,c,d...):
self.a = a
self.b = b
etc
我想用以下代替它:
def __init__(self,d...):
args=locals()
for key in args:
self.__dict__[key] = args[key]
这是一个坏主意吗?有没有更好的方法来做到这一点?
最佳答案
基于@ ThiefMaster关于** kwargs的评论:
原文链接:https://www.f2er.com/python/438993.html如果您正在接受20个参数,那么要求您的用户通过关键字而不是位置发送参数可能更有意义:使用20个参数,使用您的代码的人有可能以错误的顺序获取参数.
考虑只接受kwargs,同时拥有您想要接受的预定义键列表,如果您没有收到它们,则会引发ValueError.所以你可以使用** kwargs,然后检查一切都在那里.例如.
INITIAL_ARGS = set(['a','b','c','d','e'...])
def __init__(self,**kwargs):
if not INITIAL_ARGS.issubset(set(kwargs.iterkeys())):
raise ValueError("Class
不确定这是否比你原来的更多或更少Pythonic,但似乎在以后试图弄清楚为什么使用你的代码的人可能会遇到奇怪的错误时会节省大量的时间.