从这篇文章 - 用Python检查类型的规范方法是什么?,我可以使用此代码来检查对象o是字符串类型.
o = "str"; print type(o) is str --> True
Run Code Online (Sandbox Code Playgroud)
但是,使用用户定义的类型,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
Run Code Online (Sandbox Code Playgroud)
为什么是这样?如何获得用户定义类型的正确类型检查?我在Mac OS X上使用python 2.7.
PS:这是一个出于好奇的问题,因为我从这本书中得到了这个例子,结果是真实的,但我得到了错误.我知道Duck打字是python中的首选方式.(/sf/answers/10790951/)
罗德里戈的回答对我有用.使用'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
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
我不知道哪个复制哪个.
rod*_*igo 14
你应该使用新式的类:
class A(object):
pass
Run Code Online (Sandbox Code Playgroud)
也就是说,从中衍生出来object.
问题是旧式对象的实现就好像所有对象都是类型一样instance.
直接或间接导出object将解决此问题.或者转到Python3,那里没有旧式的类.
为什么不用isinstance(instance, class)?
>>> class A:
... def hello(self):
... print "A.hello"
...
>>> type(A)
<type 'classobj'>
>>> a = A()
>>> type(a)
<type 'instance'>
>>> isinstance(a, A)
True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2742 次 |
| 最近记录: |