Reworked how stock objects are initialized. They now have an
alternate __class__ until the App is initialized so they will raise an exception if anybody tries to use them before the C++ object has been created. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24899 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -33,7 +33,6 @@ if RELEASE_VERSION != _core.RELEASE_VERSION:
|
||||
class PyDeadObjectError(AttributeError):
|
||||
pass
|
||||
|
||||
|
||||
class _wxPyDeadObject(object):
|
||||
"""
|
||||
Instances of wx objects that are OOR capable will have their __class__
|
||||
@@ -43,15 +42,46 @@ class _wxPyDeadObject(object):
|
||||
reprStr = "wxPython wrapper for DELETED %s object! (The C++ object no longer exists.)"
|
||||
attrStr = "The C++ part of the %s object has been deleted, attribute access no longer allowed."
|
||||
|
||||
def __repr__( self ):
|
||||
def __repr__(self):
|
||||
if not hasattr(self, "_name"):
|
||||
self._name = "[unknown]"
|
||||
return self.reprStr % self._name
|
||||
|
||||
def __getattr__( self, *args ):
|
||||
def __getattr__(self, *args):
|
||||
if not hasattr(self, "_name"):
|
||||
self._name = "[unknown]"
|
||||
raise PyDeadObjectError( self.attrStr % self._name )
|
||||
raise PyDeadObjectError(self.attrStr % self._name)
|
||||
|
||||
def __nonzero__(self):
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
class PyUnbornObjectError(AttributeError):
|
||||
pass
|
||||
|
||||
class _wxPyUnbornObject(object):
|
||||
"""
|
||||
Some stock objects are created when the wx.core module is
|
||||
imported, but their C++ instance is not created until the wx.App
|
||||
object is created and initialized. These object instances will
|
||||
temporarily have their __class__ changed to this class so an
|
||||
exception will be raised if they are used before the C++ instance
|
||||
is ready.
|
||||
"""
|
||||
|
||||
reprStr = "wxPython wrapper for UNBORN object! (The C++ object is not initialized yet.)"
|
||||
attrStr = "The C++ part of this object has not been initialized, attribute access not allowed."
|
||||
|
||||
def __repr__(self):
|
||||
#if not hasattr(self, "_name"):
|
||||
# self._name = "[unknown]"
|
||||
return self.reprStr #% self._name
|
||||
|
||||
def __getattr__(self, *args):
|
||||
#if not hasattr(self, "_name"):
|
||||
# self._name = "[unknown]"
|
||||
raise PyUnbornObjectError(self.attrStr) # % self._name )
|
||||
|
||||
def __nonzero__(self):
|
||||
return 0
|
||||
@@ -186,5 +216,10 @@ from windows import *
|
||||
from controls import *
|
||||
from misc import *
|
||||
|
||||
|
||||
# Fixup the stock objects since they can't be used yet. (They will be
|
||||
# restored in wx.PyApp.OnInit.)
|
||||
_core._wxPyFixStockObjects()
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
#----------------------------------------------------------------------------
|
||||
|
Reference in New Issue
Block a user