0

按照本教程,我正在尝试在 Python 中使用抽象基类。所以我构建了两个文件:

基础.py

import abc

class PluginBase(object):
    __metaclass__ = abc.ABCMeta

    @abc.abstractmethod
    def load(self, input):
        return

implementation.py

import abc
from basis import PluginBase

class SubclassImplementation(PluginBase):

    def load(self, input):
        print input
        return input

if __name__ == '__main__':
    print 'Subclass:', issubclass(SubclassImplementation, PluginBase)
    print 'Instance:', isinstance(SubclassImplementation(), PluginBase)

运行python implementation.py工作正常,但我现在想implementation.py用作其他东西的模块。所以我进入命令行并执行:

>>> from implementation import SubclassImplementation as imp
>>> imp.load('lala')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unbound method load() must be called with SubclassImplementation instance as first argument (got str instance instead)
>>>

我在这里做错了什么,我怎样才能做到这一点?欢迎所有提示!

4

2 回答 2

3

您确实需要创建一个实例

from implementation import SubclassImplementation as imp

imp().load('lala')

这也不是一个特定的 ABC 问题。这适用于所有 Python 类和方法,除非您SubclassImplementation.loadclassmethod.

于 2014-03-12T13:20:19.323 回答
3

这与ABC没有任何关系。

您调用的对象imp是一个类,即SubclassImplementation。您需要先实例化它,然后才能调用它的任何实例方法。或者,您可以制作load一个类方法。

于 2014-03-12T13:21:06.610 回答