當繼承基類時,繼承方法無法按預期工作。繼承方法不返回數據
我已經在一個名爲Lan
的目錄中將我的模塊分成幾塊(對不起,如果這很難遵循)。
Lan/__init__.py
我:
from Bridge import Bridge
from Ethernet import Ethernet
from BaseInterface import BaseInterface
def IfCtl(iftype):
for cls in BaseInterface.__subclasses__():
if iftype in cls.iftypes():
return cls()
raise ValueError
在Lan/Bridge.py
from Lan.BaseInterface import BaseInterface
class Bridge(BaseInterface):
def __init__(self):
BaseInterface.__init__(self)
@staticmethod
def iftypes():
return ['br', 'bridge']
def up(self):
return 'Bringing up Bridge'
def down(self):
return 'Bringing down Bridge'
終於在Lan/BaseInterface.py
:
from time import sleep
class IfaceNotImplementedError(NotImplementedError):
def __init__(self, methodName):
self.methodName = methodName
def __str__(self):
return "Method %s must be subclassed" % self.methodName
class BaseInterface(object):
@staticmethod
def iftypes(): return ['']
def up(self): raise IfaceNotImplementedError('up()')
def down(self): raise IfaceNotImplementedError('down()')
def restart(self, delay = 1.0):
self.down()
sleep(delay)
self.up()
似乎一切都如預期,除了從繼承了restart()
方法工作。該方法似乎運行,因爲我運行它時有一個暫停,但我沒有返回任何數據。我期望看到覆蓋的up()
和down()
方法返回的文本。
>>> from Lan import IfCtl
>>> InterFace = IfCtl('br')
>>> print InterFace.down()
Bringing down Bridge
>>> print InterFace.up()
Bringing up Bridge
>>> print InterFace.restart()
None
>>>
我在做什麼錯?
現在你說哦crap-那麼明顯。我感到很傻。 – tMC
@tMC - 它發生了。這可能是關於這個問題最好的事情 - 讓別人注意這個問題。這比其他任何東西都更容易修復,恕我直言。 –