当前位置: 首页 > 面试题库 >

类方法生成“ TypeError:…为关键字参数获得了多个值……”

曾歌者
2023-03-14
问题内容

如果我用关键字参数定义一个类方法,则:

class foo(object):
  def foodo(thing=None, thong='not underwear'):
    print thing if thing else "nothing" 
    print 'a thong is',thong

调用该方法将生成TypeError

myfoo = foo()
myfoo.foodo(thing="something")

...
TypeError: foodo() got multiple values for keyword argument 'thing'

这是怎么回事?


问题答案:

问题在于,传递给python中类方法的第一个参数始终是在其上调用该方法的类实例的副本,通常标记为self。如果这样声明了该类:

class foo(object):
  def foodo(self, thing=None, thong='not underwear'):
    print thing if thing else "nothing" 
    print 'a thong is',thong

它的行为符合预期。

说明:

如果不self作为第一个参数,则在myfoo.foodo(thing="something")执行时,将foodo使用arguments调用该方法(myfoo, thing="something")myfoo然后将该实例分配给thing(因为thing是第一个声明的参数),但是python也会尝试分配"something"thing,因此是Exception。

为了演示,请尝试使用原始代码运行它:

myfoo.foodo("something")
print
print myfoo

您将输出如下:

<__main__.foo object at 0x321c290>
a thong is something

<__main__.foo object at 0x321c290>

您可以看到已为“事物”分配了对类“ foo”的实例“
myfoo”的引用。文档的此部分说明了函数参数的工作原理。



 类似资料:
  • 我是一种新的熊猫,我正在使用和来枢转我的数据帧,我得到了这个错误: TypeError: Swplevel()得到了一个意外的关键字参数axis 我已经检查了熊猫文件,功能以轴为参数,请问我做错了什么!非常感谢。

  • 对于范围(1,5)内的i: 范围(1,5)内的i在()1中的TypeError回溯(最近一次调用): ---- TypeError: trat()得到了一个意外的关键字参数'runs' 我在Jupyter笔记本中执行代码时遇到这个错误,我还导入了这些库 请帮忙。谢谢你。

  • 问题内容: 我是Django的新手,我无法弄清楚这个错误。请帮忙。它提供了TypeError- save()得到了意外的关键字参数’force_insert’。我测试了下面的代码,他们能够保存新的用户注册,但现在将不再保存… 这是我认为有问题的views.py的一部分: 和models.py 问题答案: 当您在Django中覆盖模型的save方法时,还应该传递和覆盖方法。该代码可能工作正常:

  • 这是错误: 我想使用像你在代码中看到的cookie,但我不能,有人能帮我吗?

  • 下面看似简单的代码抛出以下错误 回溯(最近一次调用last):文件“search.py”,第48行,pageToken=page_token)。方法中的第716行执行()文件“C:\Users\Choi\AppData\Local\Programs\Python\Python37\lib\site packages\GoogleAppClient\discovery.py” raise TypeE

  • 我正在尝试转换大熊猫的unix时间。我从一个csv文件中读取了这个,但是当我试图转换它时,我得到了上面的错误。 完全回溯 附加信息: 熊猫的版本是:0.8。0 操作系统:Debian,使用sudo apt get install python pandas安装(根据官方网站) 样本数据