2011-01-27 14 views
12

が定義されていません。abstractmethodが、私は例外を取得するので、私はこのコードを実行することはできません

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__() 

を私はhttp://docs.python.org/library/abc.html

EDIT

からそれを得たので、私は、コードがOKであることを確信しています

答えをいただきありがとうございますが、それはなぜですか

print '__subclasshook__' 

これは動作しませんか?私はあなたが唯一のもabstractmethod

from abc import ABCMeta, abstractmethod 

をインポートし、すべてがうまくいくはずABCMeta

from abc import ABCMeta 

をインポートデバッグI/0で

+0

なぜ 'print '私は__subclasshookに入っていますか__''は動作しません。あなたは実際に引用符を数える時間をとったのですか? –

+0

申し訳ありませんが、実際には '__subclasshook__'があります。私は明快にここに別のテキストを書いた:/ – user278618

答えて

23

を得ることはありません。

2

abstractmethodabcからインポートする必要があります。

関連する問題