Mixing in new-style classes in Zope 2.7
09 April 2008
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.