0

Python3.4 で multiprocessing モジュールを使用しています。何らかの理由で、isinstance() を使用すると次のエラーが発生します。

>>> from multiprocessing import Lock
>>> isinstance(Lock(), Lock)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: isinstance() arg 2 must be a type or tuple of types

一方、同じことを試してみるとうまくいきdatetimeます

>>> from datetime import datetime, timedelta
>>> isinstance(datetime.now(), datetime)

True

私が試したこと:

ロックがコンソールと日時にどのように表示されるかを確認すると、次のようになります。

>>> Lock()
<Lock(owner=None)>
>>> Lock
<bound method DefaultContext.Lock of <multiprocessing.context.DefaultContext object at 0x00000000039810B8>>
>>> datetime.now()
datetime.datetime(2016, 6, 13, 11, 24, 12, 573712)
>>> datetime
<class 'datetime.datetime'>

しかし、Lock をその定義に従っていると、それが実際にクラスであることがわかります。

class Lock(object):
    def acquire(self, blocking=True, timeout=-1):
        pass

    def release(self):
        pass

では、なぜコンソールはそれを「バインドされたメソッド」と呼んでいるのでしょうか。Lock インスタンスで isinstance() を使用するにはどうすればよいですか?

4

1 に答える 1

0

私の PyCharm IDE は、実行時に解釈されるものとは異なるロックの定義に私を導いていたようisinstanceです。後者は関数です。私が探していたロッククラスはで定義されていますmultiprocessing.synchronize.py

>>> from multiprocessing import Event, Lock, synchronize
>>> isinstance(Lock(), synchronize.Lock)
True
于 2016-06-14T12:52:49.630 に答える