我刚刚重新打包了我的程序。以前,所有模块都处于“whyteboard”包中,包含一个包含一组虚拟GUI测试对象的“fakewidgets”包。TypeError:未绑定方法__init __()....在重新打包后的单元测试期间
现在,我所有的模块都在包装中,例如, whyteboard.gui,whyteboard.misc,whyteboard.test - 这是fakewidgets现在居住的地方。
现在,运行我的测试时,我得到一个异常,
File "/home/steve/Documents/whyteboard/whyteboard/gui/canvas.py", line 77, in __init__
wx.ScrolledWindow.__init__(self, tab, style=wx.NO_FULL_REPAINT_ON_RESIZE | wx.CLIP_CHILDREN)
TypeError: unbound method __init__() must be called with ScrolledWindow instance as first argument (got Canvas instance instead)
这里的 类问题
class Canvas(wx.ScrolledWindow):
def __init__(self, tab, gui, area):
wx.ScrolledWindow.__init__(self, tab, style=wx.NO_FULL_REPAINT_ON_RESIZE | wx.CLIP_CHILDREN)
然而,我的程序加载和运行正常,除了从单元测试。代码是相同的,只是我的测试的导入代码与新软件包不同。
前:
import os
import wx
import fakewidgets
import gui
import lib.mock as mock
from canvas import Canvas, RIGHT, DIAGONAL, BOTTOM
from fakewidgets.core import Bitmap, Event, Colour
from lib.configobj import ConfigObj
from lib.pubsub import pub
from lib.validate import Validator
现在
:
import os
import wx
import whyteboard.test
import whyteboard.gui.frame as gui
from whyteboard.lib import ConfigObj, mock, pub, Validator
from whyteboard.gui.canvas import Canvas, RIGHT, DIAGONAL, BOTTOM
from whyteboard.test.fakewidgets.core import Bitmap, Event, Colour, PySimpleApp
这可能是值得一提的是,fakewidgets包做了一些取巧到我的程序认为它的使用wxPython的班,即使他们嘲笑。 这是从被采用进口模块whyteboard.test.fakewidgets' __init__
class Window(object):
def __init__(self, parent, *args, **kwds):
self.parent = parent
self.Enabled = True
self.calls = []
self.size = (0, 0)
self.captured = False
def GetClientSizeTuple(self):
return (0, 0)
self.captured = True
def GetId(self):
pass
def Fit(self):
pass
def SetFocus(self):
pass
def PrepareDC(self, dc):
pass
def Destroy(self):
pass
...
class ScrolledWindow(Window):
def SetVirtualSize(self, *size):
pass
def SetVirtualSizeHints(self, *size):
pass
import wx
wx.__dict__.update(locals())
为什么你明确调用'wx.ScrolledWindow .__ init __(self,...)'而不是'super(Canvas,self).__ init __(...)'? – 2010-08-01 21:12:37
无论如何我都会得到相同的错误。 – 2010-08-01 21:25:48
“假”和真正的wx类之间明显存在混淆。你的诡计是如何工作的?你如何实例化你的Canvas类? – 2010-08-29 13:21:08