当子类化基类时,继承的方法不能按预期工作。你知道吗
我已经将我的模块分成了几个部分(如果很难理解的话,很抱歉),全部放在一个名为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()
除了从BaseInterface
继承的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
>>>
我做错什么了?你知道吗
更改:
收件人:
您的
restart()
方法不返回任何内容。如果希望它携带up的返回值,则需要最后一行来读取return self.up()
。否则,它总是像现在一样返回None
——任何没有显式返回值的函数的默认返回。你知道吗你不是从
restart
回来的您需要更改:
至
或更改:
至
相关问题 更多 >
编程相关推荐