use*_*618 19 python abstract-class
我无法运行此代码,因为我得到了异常:
NameError: name 'abstractmethod' is not defined
File "C:\Tests\trunk\PythonTests\AbstractClasses.py", line 12, in <module>
class MyIterable:
File "C:\Tests\trunk\PythonTests\AbstractClasses.py", line 15, in MyIterable
@abstractmethod
from abc import ABCMeta
class Foo(object):
def __getitem__(self, index):
print '__get_item__ Foo'
def __len__(self):
print '__len__ Foo'
def get_iterator(self):
print 'get_iterator Foo'
return iter(self)
class MyIterable:
__metaclass__ = ABCMeta
@abstractmethod
def __iter__(self):
while False:
yield None
def get_iterator(self):
return self.__iter__()
@classmethod
def __subclasshook__(cls, C):
if cls is MyIterable:
if any("__iter__" in B.__dict__ for B in C.__mro__):
print "I'm in __subclasshook__"
return True
return NotImplemented
MyIterable.register(Foo)
x=Foo()
x.__subclasshook__()
Run Code Online (Sandbox Code Playgroud)
我确信代码没问题,因为我是从http://docs.python.org/library/abc.html获得的
编辑
谢谢你的回答,它现在有效,但为什么呢
print '__subclasshook__'
Run Code Online (Sandbox Code Playgroud)
这不起作用?我没有进入Debug I/0
Sve*_*ach 38
你只导入了 ABCMeta
from abc import ABCMeta
Run Code Online (Sandbox Code Playgroud)
也导入 abstractmethod
from abc import ABCMeta, abstractmethod
Run Code Online (Sandbox Code Playgroud)
一切都应该没问题.
您需要abstractmethod从导入abc。是抽象基类abc的内置 Python 包。
一个例子:
from abc import abstractmethod
class Foo:
def __init():
pass
@abstractmethod
def bar():
pass
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11600 次 |
| 最近记录: |