Mixing in new-style classes in Zope 2.7

09 April 2008   0 comments   Zope

Mind That Age!

This blog post is 9 years old! Most likely, its content is outdated. Especially if it's technical.

Powered by Fusion×

Don't ask why I'm developing products for Zope 2.7 but I had to and I should have been more careful with these oldtimers.

I kept getting this error:

TypeError:  expected 2 arguments, got 1

(notice the strange double space after the : colon) This is different from the standard python TypeError when you get the parameters wrong which looks like this TypeError: __init__() takes exactly 2 arguments (1 given).

The line it complained this happened looked like this:

class MyTool(SimpleItem, UniqueObject, OtherClass):
   id = 'some_tool'
   meta_type = 'some meta type'
   def __init__(self, id='some_tool'):
       self.id = id  # <--- THIS WAS THE CULPRIT LINE APPARENTLY!!

I couldn't understand what the hell was wrong on that line! Clearly it wasn't a normal Python error. Here's the explaination: That OtherClass was a new-style class inheriting from object. It looked like this:

class OtherClass(object):
   ...

When I changed that to:

class OtherClass:
   ...

The whole thing started to work. Long lesson learnt, don't use new-style classes mixed in into Zope 2.7.

Follow @peterbe on Twitter

Comments

Thank you for posting a comment

Your email will never ever be published


Related posts

Previous:
pwdf - a mix of ls and pwd 07 April 2008
Next:
What I like and dislike about Grok 11 April 2008
Related by Keyword:
Python new-style classes and the super() function 12 July 2008
Related by Text:
Python new-style classes and the super() function 12 July 2008
Setting security declarations to Zope classes 02 February 2006
Careful with your assertRaises() and inheritance of exceptions 10 April 2013
Ugly one-liner to debug an object in Zope 31 March 2005
Newfound love of @staticmethod in Python 02 July 2012