【问题标题】:python object() takes no parameters error [closed]python object()没有参数错误[关闭]
【发布时间】:2014-04-19 23:07:04
【问题描述】:

我不敢相信这实际上是一个问题,但我一直在尝试调试这个错误,但我一无所获。我确定我错过了一些非常简单的东西,因为这看起来很愚蠢。

import Experiences, Places, Countries
class Experience(object):

    def make_place(self, place):
        addr = place["address"]
        addr = Places.ttypes.Address(addr["street"], addr["city"], addr["state"], Countries.ttypes._NAMES_TO_VALUES[addr["country"]], addr["zipcode"])
        ll = Geocoder.geocode(addr["street"]+", "+addr["city"]+", "+addr["state"]+" "+addr["zipcode"])
        place["location"] = Places.ttypes.Location(ll[0].coordinates[0], ll[0].coordinates[1])

    def __init__(self, exp_dict):
        exp_dict["datetimeInterval"] = Experiences.ttypes.DateTimeInterval(remove(exp_dict, "startTime"), remove(exp_dict, "endTime"))
        exp_dict["type"] = Experiences.ttypes.ExperienceType.OPEN
        exp_dict["place"] = self.make_place(exp_dict["place"])
        self.obj = Experiences.ttypes.Experience(**exp_dict)

@client.request
@client.catchClientException
def addExperience(thrift, access_token, exp_dict):
    experience = Experience(exp_dict)
    return thrift.client.addExperience(thrift.CLIENT_KEY, access_token, experience.obj)

(与addExperience对应的两个装饰器是因为这是在声明其类的文件之外定义的。)

我得到的错误是:

experience = Experience(exp_dict)
TypeError: object() takes no parameters

所以这对我来说没有任何意义,因为我清楚地为 init 函数声明了第二个参数。任何帮助都会很棒!

Traceback (most recent call last):
  File "/Users/phil/Hangify/hy-frontend-server/env/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/Users/phil/Hangify/hy-frontend-server/env/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/Users/phil/Hangify/hy-frontend-server/env/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/phil/Hangify/hy-frontend-server/env/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/Users/phil/Hangify/hy-frontend-server/env/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Users/phil/Hangify/hy-frontend-server/env/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/phil/Hangify/hy-frontend-server/env/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Users/phil/Hangify/hy-frontend-server/env/lib/python2.7/site-    packages/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Users/phil/Hangify/hy-frontend-server/hangify/session.py", line 22, in check_login
    return f()
  File "/Users/phil/Hangify/hy-frontend-server/hangify/handlers/create.py", line 31, in Handle
    res = exp.addExperience(hangify.thrift_interface, access_token, experience)
  File "/Users/phil/Hangify/hy-frontend-server/hangify/client/__init__.py", line 22, in decorator
    obj = func(client, *args, **kwargs)
  File "/Users/phil/Hangify/hy-frontend-server/hangify/client/__init__.py", line 30, in decorator
    return func(*args, **kwargs)
  File "/Users/phil/Hangify/hy-frontend-server/hangify/client/exp.py", line 39, in addExperience
    experience = Experience(exp_dict)
TypeError: object() takes no parameters

这里是 Experience.mro() - 它表示 Experience 类的正确模块位置:

[<class 'hangify.client.exp.Experience'>, <type 'object'>]

这里是目录(经验):

 ['__class__', '__delattr__', '__dict__', '__doc__', '__format__',
 '__getattribute__', '__hash__', '__init__', '__module__', '__new__',
 '__reduce__', '__reduce_ex__', '__repr__', '__setattr__',
 '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'make_place']

【问题讨论】:

  • 什么是Experiences,什么是Experiences.ttypes
  • 经验导入
  • 但我认为这无关紧要。例如,当我从继承链中删除对象时,错误变为TypeError: this constructor takes no arguments
  • @phileaton: 什么类的类方法?我怀疑Experience(exp_dict) 不是指您认为的课程。你能创建一个独立的例子来说明这个问题吗?
  • 你能显示你的异常的完整回溯吗?除非在包含 addExperience 的任何命名空间中重新定义了 Experience,否则该异常没有意义。

标签: python


【解决方案1】:

您混合了制表符和空格。 __init__ 实际上是嵌套在另一个方法中定义的,因此您的类没有自己的__init__ 方法,而是继承object.__init__。在记事本中打开您的代码,而不是您使用的任何编辑器,您将看到您的代码,就像 Python 的制表符处理规则一样。

这就是为什么你不应该混合制表符和空格。坚持一个或另一个。建议使用空格。

【讨论】:

    【解决方案2】:

    我为此挣扎了一段时间。 __init__ 的愚蠢规则。两个“_”加在一起就是“__”

    【讨论】:

    • 因为我马虎,只写了__init()
    • 在我的情况下 __init_() - 多么蹩脚的错误:D 自找 1h vs SO 3m 来解决问题:P
    【解决方案3】:

    我也遇到了这个错误。顺便说一句,我输入的是 __int__ 而不是 __init__

    我认为,在许多输入错误的情况下,我使用的 IDE (IntelliJ) 会将颜色更改为函数定义的默认设置。但是,在我的情况下 __int__ 是另一种 dunder/magic 方法,颜色与 IDE 为 __init__ 显示的颜色保持相同(默认预定义项目定义颜色),这让我花了一些时间找出丢失的i的时间。

    【讨论】:

    • 大声笑,我犯了同样的错误,但找不到。您的评论帮助我交叉检查了我使用的默认方法。谢谢:)
    【解决方案4】:

    你必须按两次点击和 (_) 键,它必须看起来像:

    __init__
    

    【讨论】:

    • 问题包含正确的__init__
    猜你喜欢
    • 2021-05-10
    • 2019-01-31
    • 2013-11-18
    • 1970-01-01
    • 2018-02-26
    • 2022-08-10
    • 1970-01-01
    • 2021-02-21
    相关资源
    最近更新 更多