При создании подкласса базового класса унаследованный метод не работает должным образом.
Я разбил свой модуль на пару частей (извините, если за этим трудно следить), все в каталоге с именем 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
>>>
Что я делаю не так?