加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python初始化

发布时间:2020-12-17 00:51:29 所属栏目:Python 来源:网络整理
导读:我有这个代码: 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] 这是一个坏主意吗?有没有更好的方法来做到这一点? 最佳答案 基

我有这个代码:

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的评论:

如果您正在接受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,但似乎在以后试图弄清楚为什么使用你的代码的人可能会遇到奇怪的错误时会节省大量的时间.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读