【问题标题】:Receiving Arguments via Pointers in Python在 Python 中通过指针接收参数
【发布时间】:2011-10-02 11:38:14
【问题描述】:

我有一个类,其函数定义如下。我的意图是向它发送多个参数。

为了测试,我把它称为:class_name("argument1","argument2"),它说:__init__accepts atmost 1 arguments , 3 given

def __init__(self, **options):
    for name in options:
        self.__dict__[name] = options[name]

处理这个问题的正确方法是什么?

欢迎提出任何建议......

【问题讨论】:

标签: python arguments


【解决方案1】:

这里有一个更简单的写法

def __init__(self, **options):
    vars(self).update(options)

【讨论】:

  • @gnibbler - Python 文档警告不要修改 vars 返回的字典 - 请参阅 docs.python.org/library/functions.html#vars
  • @A Lee,当vars 不带参数调用时等价于locals(),不应修改此结果。在实例的情况下,它只是返回__dict__,当然可以修改。
【解决方案2】:

* 表单收集位置参数:

def __init__(self, *options):

** 表单收集关键字参数:

def __init__(self, **options):

您提供了 2 个位置参数以及 self 的实例,但它被定义为只需要 1 个位置参数 self

【讨论】:

    【解决方案3】:

    您想使用一个星号而不是两个星号。双星号用于命名参数。如果您有兴趣进一步阅读,python documentation 中有一个很好的解释。

    def __init__(self, *options):
        for name in options:
            self.__dict__[name] = name
    

    但是,从您的代码来看,我认为真正的问题是您错误地调用了您的函数。

    你可以这样称呼它:

    class_name(argument1="some value")
    
    def __init__(self, **options):
        for name,val in options.iteritems():
            self.__dict__[name] = val
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-19
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      • 2018-12-31
      • 2011-08-31
      • 2016-12-18
      • 1970-01-01
      相关资源
      最近更新 更多