python object() takes no parameters error

Python

Python Problem Overview


I can't believe this is actually a problem, but I've been trying to debug this error and I've gotten nowhere. I'm sure I'm missing something really simple because this seems so silly.

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)

(The two decorators corresponding to addExperience are because this is defined outside of the file where its class is declared.)

The error I'm getting is:

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

So this doesn't make any sense to me because I'm clearly declaring a second argument to the init function. Any help would be awesome!

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

Here is Experience.mro() - which says the correct module-wise location of the class Experience:

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

And here is dir(Experience):

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

Python Solutions


Solution 1 - Python

You've mixed tabs and spaces. __init__ is actually defined nested inside another method, so your class doesn't have its own __init__ method, and it inherits object.__init__ instead. Open your code in Notepad instead of whatever editor you're using, and you'll see your code as Python's tab-handling rules see it.

This is why you should never mix tabs and spaces. Stick to one or the other. Spaces are recommended.

Solution 2 - Python

I struggled for a while about this. Stupid rule for __init__. It is two "_" together to be "__"

Solution 3 - Python

I too got this error. Incidentally, i typed int instead of init.

I think, in many mistype cases the IDE i am using (IntelliJ) would have changed the color to the default set for Function definition. But, in my case int being another dunder/magic method, color remained same as the one which IDE displays for init (default Predefined item definition color), which took me some time in spotting the missing i.

Solution 4 - Python

You must press twice on tap and (_) key each time, it must look like:

__init__

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestioneatonphilView Question on Stackoverflow
Solution 1 - Pythonuser2357112View Answer on Stackoverflow
Solution 2 - PythonMikeView Answer on Stackoverflow
Solution 3 - PythonNafeez QuraishiView Answer on Stackoverflow
Solution 4 - Pythonuser5028791View Answer on Stackoverflow