6

タイプ/クラスの統合なので、すべての値はから派生したタイプであると私は理解していobjectます。しかし、私はこれの絶対的な確認をドキュメントで見つけることができません。常にそうあるisinstance(anything, object)べきであるのは当然のことTrueですが、Python2コードベースにレガシーエッジケースがあることも想像できます。誰かがisinstance(value, object)そうでない True例を知っていますか?

コンテキスト:私が設計している型階層の一部として、常に返しAlphaたいすべてを含む型があります。Python 2.6以降でもうまくいくと思いますが、確実にしたいと思います。isinstance(obj, Alpha)TrueABCMeta.register(object)

編集:後世のために、ABCMeta.register(object)動作しません(試してみてください)。Ethan Furmanは、以下の彼の回答で、このケースの代替ソリューションを提供しています。

4

2 に答える 2

1

から派生しない非Pythonコード(Cたとえば)でクラスを作成することは可能objectです。

__subclasshook__あなたはあなたに追加することによってあなたが望むものを達成することができるはずですAlpha

--> import abc
--> class Test(object):
...   __metaclass__ = abc.ABCMeta
...   @classmethod
...   def __subclasshook__(cls, C):
...     return True
...
--> isinstance(dict(), Test)
True
--> isinstance(42, Test)
True
--> isinstance(0.59, Test)
True
--> class old_style:
...     pass
...
--> isinstance(old_style(), Test)
True
于 2012-03-09T20:01:46.983 に答える
0

2.xでは、ユーザー定義クラス(およびいくつかのstdlibクラス)はデフォルトではオブジェクトから派生しません。これは3.xで修正されています。

于 2012-03-09T20:08:05.527 に答える