从这篇文章 -在 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:这是出于好奇而提出的问题,因为我从这本书中得到了这个例子,结果是正确的,但我得到了错误的结果。我知道鸭子打字是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)
不知道哪个抄哪个。