返回没有数据的继承方法

时间:2011-09-13 19:54:56

标签: python oop inheritance

在继承基类时,继承的方法无法按预期工作。

我在一个名为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
>>> 

我做错了什么?

3 个答案:

答案 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()