Why use isinstance() instead of type()?
本问题已经有最佳答案,请猛点这里访问。
我见过人们经常推荐使用isInstance()而不是type(),我觉得很奇怪,因为type()对我来说更可读。
1 2 3 4 | >>> isinstance("String",str) True >>> type("String") is str True |
后者看起来更像Python,更清晰,而前者稍微模糊,并暗示了我的特定用途(例如,测试用户构建的类而不是内置的类型),但还有其他一些我不知道的好处吗?type()是否会导致一些不稳定的行为或错过一些比较?
让我给你一个简单的例子,为什么它们会不同:
1 2 3 4 | >>> class A(object): pass >>> class B(A) : pass >>> a = A() >>> b = B() |
到目前为止,声明了一个变量
1 2 3 4 | >>> isinstance(a, A) True >>> type(a) == A True |
但是
1 2 3 4 | >>> isinstance(b, A) True >>> type(b) == A False |
您在这里排除了使用子类的可能性。
当子类满足接口时,为什么只限制自己使用一种类型?如果有人想使用
因此,使用
下面是反例:
1 2 3 4 5 6 7 8 9 | class A(): pass a = A() >>> isinstance(a, A) True >>> type(a) is A False |
因此,我认为
python 2.x的基本示例:标准字符串和Unicode字符串,具有通用的基类
1 2 3 4 5 6 7 | s ="123" u = u"123" isinstance(s, str) is True type(u) == str # something which has string nature returns False for this test # these tests are common-pattern in Python 2.x and behaves correctly isinstance(s, basestring) is True isinstance(u, basestring) is True |