Using property in classic class may not work

Neil Hodgson nhodgson at eb2.net.au
Tue Apr 15 19:47:19 EDT 2003


[With some editing to isolate the points]

[Neil Hodgson]
  The class in question is derived from a wxWindows class, so I can't
make it derive just from object. The "What's New in Python 2.2"
document only mentions property wrt new-style clases.

[A. Lloyd Flanagan]
However, the last time I tried to subclass from both wxFrame and
object, wxPython freaked out (that's a technical term for "I don't
remember what happened, but boy, it sure didn't work").
Not sure about the latest version of wxPython, though -- there's
binaries for python 2.3 out by now.  I'll have to try it again..

[Alex Martelli]
If wxPython keeps freaking, you may have to give up on properties
if you HAVE to inherit its classes (can't just wrap with automatic
delegation) and go back to "good old" (yeah right) __setattr__.  Or,
gently pressure wxPython's maintainers to have them move to
new-style classes... whatever aspects of old-style classes they
may be taking for granted at present, migrating to new-style can
hardly be a major job, in my experience.

[Me again]
Robin may feel constrained to keep wxPython compatible with multiple 
Python major versions.
Here is the "freaking out" with wxPython+wxGTK 2.4.0.7 on Python 2.2 
caused by adding 'object' as a second base class to the most derived 
frame class, that is, the class that has the property:

Traceback (most recent call last):
   File "DemonTerm.py", line 1343, in ?
     app = DemonTermApp(sys.argv)
   File "DemonTerm.py", line 1290, in __init__
     wxApp.__init__(self, 0)
   File 
"/usr/local/ActivePython-2.2/lib/python2.2/site-packages/wxPython/wx.py", 
line 1802, in __init__
     _wxStart(self.OnInit)
   File "DemonTerm.py", line 1327, in OnInit
     self.frame = DemonFrame(BasicScreenDefs)
   File "DemonTerm.py", line 577, in __init__
     TerminalGUI.TerminalFrame.__init__(self, screenDefs)
   File "TerminalGUI.py", line 762, in __init__
     style=wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE)
   File 
"/usr/local/ActivePython-2.2/lib/python2.2/site-packages/wxPython/frames.py", 
line 150, in __init__
     self._setOORInfo(self)
   File 
"/usr/local/ActivePython-2.2/lib/python2.2/site-packages/wxPython/windows.py", 
line 60, in _setOORInfo
     val = apply(windowsc.wxEvtHandler__setOORInfo,(self,) + _args, _kwargs)
TypeError: Type error in argument 1 of wxEvtHandler__setOORInfo. 
Expected _wxEvtHandler_p.

    OOR is wxPythonese for 'Original Object Return' but I don't know 
what that really means.

    Neil





More information about the Python-list mailing list