如何在Python中使用抽象基类?
下面我将尝试在Python中使用抽象基类。因此,我构建了两个文件: 基础.py:如何在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
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类和方法,除非进行子类实现。加载aclassmethod
您确实需要创建一个实例:
这也不是一个具体的ABC问题;这适用于所有Python类和方法,除非您进行了子类实现。load
aclassmethod
这与ABC无关
您调用的imp
对象是一个类,即子类实现。您需要先实例化它,然后才能调用它的任何实例方法。或者,您可以使load
成为一个classmethod。这与ABC无关
您调用的imp
对象是一个类,即子类实现。您需要先实例化它,然后才能调用它的任何实例方法。或者,你可以把load
变成一个classmethod。我真蠢。最近我在php中使用了很多静态函数,所以我习惯于直接从类中运行函数,以至于忘记了实例。无论如何谢谢你!我真蠢。最近我在php中使用了很多静态函数,所以我习惯于直接从类中运行函数,以至于忘记了实例。无论如何谢谢你!正如我对Daniel所说的,我最近一直在用php静态函数(bLuh,我喜欢Python!),我完全忘记了这一点。无论如何谢谢你!正如我对Daniel所说的,我最近一直在用php静态函数(bLuh,我喜欢Python!),我完全忘记了这一点。无论如何谢谢你!