Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中使用抽象基类?_Python_Abstract Class_Abc - Fatal编程技术网

如何在Python中使用抽象基类?

如何在Python中使用抽象基类?,python,abstract-class,abc,Python,Abstract Class,Abc,下面我将尝试在Python中使用抽象基类。因此,我构建了两个文件: 基础.py: import abc class PluginBase(object): __metaclass__ = abc.ABCMeta @abc.abstractmethod def load(self, input): return import abc from basis import PluginBase class SubclassImplementation(P

下面我将尝试在Python中使用抽象基类。因此,我构建了两个文件:

基础.py

import abc

class PluginBase(object):
    __metaclass__ = abc.ABCMeta

    @abc.abstractmethod
    def load(self, input):
        return
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)
实现.py

import abc

class PluginBase(object):
    __metaclass__ = abc.ABCMeta

    @abc.abstractmethod
    def load(self, input):
        return
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)
>>>
>>从实现导入子类实现为imp
>>>进口货物(“拉拉”)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:必须以SubassImplementation实例作为第一个参数调用unbound method load()(改为获取str实例)
>>>
我在这里做错了什么,我怎样才能让它工作?欢迎所有提示

您确实需要创建一个实例:

这也不是一个具体的ABC问题;这适用于所有Python类和方法,除非进行
子类实现。加载
a
classmethod

您确实需要创建一个实例:


这也不是一个具体的ABC问题;这适用于所有Python类和方法,除非您进行了
子类实现。load
a
classmethod

这与ABC无关


您调用的
imp
对象是一个类,即子类实现。您需要先实例化它,然后才能调用它的任何实例方法。或者,您可以使
load
成为一个classmethod。

这与ABC无关


您调用的
imp
对象是一个类,即子类实现。您需要先实例化它,然后才能调用它的任何实例方法。或者,你可以把
load
变成一个classmethod。

我真蠢。最近我在php中使用了很多静态函数,所以我习惯于直接从类中运行函数,以至于忘记了实例。无论如何谢谢你!我真蠢。最近我在php中使用了很多静态函数,所以我习惯于直接从类中运行函数,以至于忘记了实例。无论如何谢谢你!正如我对Daniel所说的,我最近一直在用php静态函数(bLuh,我喜欢Python!),我完全忘记了这一点。无论如何谢谢你!正如我对Daniel所说的,我最近一直在用php静态函数(bLuh,我喜欢Python!),我完全忘记了这一点。无论如何谢谢你!