2

以下のコードの場合:

import os.path

class Test:

   @classmethod
   def foo(cls):
       cls.exist = os.path.exists
       print type(cls.exist)
       print type(os.path.exists)

def main():
   Test.foo()

出力を次のように取得しています:

<type 'instancemethod'>
<type 'function'>

関数 os.path.exist をクラス変数 cls.exist に割り当てているだけです。しかし、両方の変数を出力すると、1 つはインスタンス メソッドとして取得され、もう 1 つは関数として取得されます。なぜ ?

4

2 に答える 2

1

クラス変数として割り当てている可能性がありますが、クラスにバインドされています。

Traceback (most recent call last):
  File "<stdin>", line 12, in <module>
TypeError: unbound method exists() must be called with Test instance as first argument (got str instance instead)

クラスから「独立」させるにexistは、 aを作成する必要があります。staticmethod

cls.exist = staticmethod(os.path.exists)

現在、両方とも同じタイプです。

<type 'function'>
<type 'function'>

そして、実際にそれを呼び出すことができます:

>>> Test.exist('foo')
False
于 2013-04-17T18:24:01.607 に答える