接口继承的声明

时间:2019-02-22 08:30:49

标签: python-3.x inheritance zope.interface

我正在尝试使用由Github开发人员开发的旧代码。该代码使用zope.interface库中的实现在类的元素上声明接口。由于库中的实现在Python 3.6上不再起作用,因此我遇到了以下错误:

TypeError: Class advice impossible in Python3.  Use the @implementer class decorator instead.

几个网站已经说明了如何用@implementer代替工具以在Python 3.6上工作,例如here。但是我还没有找到任何示例来说明当zope.interface.implements被用作继承时如何更新代码。代码如下:

from zope.interface import implements
class Car(implements(Moveable)):
     def __init__(self, x, v, lane, model: IDM, lane_change: LaneChange,
             length):
...

我想更新此代码以在Python 3.6上运行。我已经尝试过了

@implementer(Moveable) 
class Car:
     def __init__(self, x, v, lane, model: IDM, lane_change: LaneChange,
             length):

但是它不起作用。 请帮助我找出如何使以上代码在Python 3.6中运行。

2 个答案:

答案 0 :(得分:2)

下面的步骤为我解决了这个问题,

pip uninstall apex
git clone https://www.github.com/nvidia/apex
cd apex
python3 setup.py install

答案 1 :(得分:0)

要使用实现程序而不是Python建议的实现程序,您需要导入它,而不是导入实现程序

from zope.interface import implementer

在您的代码中,它表明您仍在使用工具,根据提供的信息,这似乎是问题所在。希望对您有所帮助。