在继承基类时,继承的方法无法按预期工作。
我在一个名为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()
继承的BaseInterface
方法之外,所有内容似乎都按预期工作。该方法似乎运行,因为我运行它时有一个暂停,但我没有返回任何数据。我希望看到覆盖的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
>>>
我做错了什么?
答案 0 :(得分:2)
您没有从restart
您需要更改:
def up(self):
return 'Bringing up Bridge'
到
def up(self):
print 'Bringing up Bridge'
或更改:
def restart(self, delay = 1.0):
self.down()
sleep(delay)
self.up()
到
def restart(self, delay = 1.0):
vals = []
vals.append(self.down())
sleep(delay)
vals.append(self.up())
return vals
答案 1 :(得分:1)
您的restart()
方法不会返回任何内容。如果您希望它带有返回值up,则需要最后一行读取return self.up()
。否则,它将始终像现在一样返回None
- 任何没有显式返回值的函数的默认返回。
答案 2 :(得分:0)
变化:
def restart(self, delay = 1.0):
self.down()
sleep(delay)
self.up()
到:
def restart(self, delay = 1.0):
print self.down()
sleep(delay)
print self.up()