この投稿から - Python で型をチェックする正規の方法は何ですか? 、このコードを使用して、オブジェクト o が文字列型であることを確認できます。
o = "str"; print type(o) is str --> True
ただし、ユーザー定義型でtype(a) is A
は機能しないようです。
class A:
def hello(self):
print "A.hello"
a = A()
print type(a) is A # --> False
print type(a) == A # --> False
どうしてこれなの?ユーザー定義型の正しい型チェックを取得するにはどうすればよいですか? Mac OS X で Python 2.7 を使用しています。
PS: これは好奇心からの質問です。この本からこの例を取得した結果、true になりましたが、false になりました。ダックタイピングがPythonで推奨される方法であることを理解しています。( https://stackoverflow.com/a/154156/260127 )
追加した
ロドリゴの答えは私にとってはうまくいきます。「isinstance」を使用しても正確な型はわかりません。オブジェクトがクラスまたはサブクラスのインスタンスであるかどうかをテストするだけです。
class C(A):
def hello(self):
print "C.hello"
a = A()
c = C()
print isinstance(a, A) --> True
print isinstance(c, A) --> True
print isinstance(a, C) --> False
print isinstance(c, C) --> True
print "----"
print type(a) == A --> True
print type(c) == A --> False
追加 2
jdurango の回答 ( a.__class__ is A
) から、かなり興味深い Java の同等物が得られました。
a.getClass() == A.class <--> a.__class__ == A (a.__class__ is A)
a isinstance A <--> isinstance(a, A)
c isinstance A <--> isinstance(c, A)
どれがどれをコピーしたかわかりません。