问:使用类型()的方法判断变量,结果是鄙视了那只老鸟,我不知道为什么。
请您解释:问题出在哪里,如何判断变量的类型是个好方法?
>>> n = 911
>>>类型(n)
<类型'int'>
>>> type(n)是int
真正
答:实际上,还有另一种使用isinstance的方法,
例如:
a = 111
isinstance(a,int)
真正
isinstance和type之间的区别在于:
A类:
通过
B(A)级:
通过
isinstance(A(),A)#返回True
type(A())== A#返回True
isinstance(B(),A)#返回True
type(B())== A#返回False
区别在于子类之类的类型不再起作用。您是说那只老鸟吗?
答:它与Python的新型类有关。相关链接http://www.python.org/doc/newstyle/以下代码在Python 2.5中执行:
>>> A类:
...通过
...
>>> a = A()
>>> B类:
...通过
...
>>> b = B()
>>>类型(a)是类型(b)
真正
>>>
在老式类中,任意实例type都是“实例”。因此绝对不可能按类型来判断其类型。此外,此问题与Python的想法有关。通常,您不应编写代码来检查
类型,而应直接假定正在操作的实例具有所需的属性,否则将引发异常。即使需要检查类型,也应该使用isinstanceJudge,因此您希望subclass它
的类型也可以正常处理(例如,需要处理函数)Message类型,那么它应该能够处理Message子类型,MyMessage因此应使用isinstance(arg,Message)
判断这个,而不是由这个type(arg) == Message来判断),
请参阅鸭打字http://en.wikipedia.org/wiki/Duck_typ… ;此外,此问题也与“metaclass关于它”相关,但我真的不记得它会导致什么。type()未
返回type此类是实例。要添加的…更新:
查找另一个示例供您参考。
Python 2.7.3(默认,2012年5月12日,00:10:31)
达尔文[GCC 4.2.1(Gentoo 4.2.1_p5666,Apple Inc. build 5666)(第3点)]
键入“帮助”,“版权”,“信用”或“许可证”以获取更多信息。
>>>从集合导入迭代器
>>> A类(对象):
... def __iter __(自己):
...通过
... def next(self):
...通过
...
>>> isinstance(A(),迭代器)
真正
答:强烈建议使用isinstance()代替type()。以下两个示例说明了为什么不使用type(),如果您对它不满意,可以继续。
http://www.chenxm.cc/post/429… ;
Code sample 2:
import typesclass UserInt(int):
def __init__(self, val=0):
self.val = int(val)
i = 1n = UserInt(2)
print(type(i) is type(n)) # False
这意味着I和N的类型不同,并且实际上UserInt继承自int,因此这种判断是有问题的。当我们扩展Python内置类型时,该类型返回错误的结果。这意
味着I和N的类型不同,并且实际上UserInt继承自int,因此这种判断是有问题的。当我们扩展Python内置类型时,该类型返回错误的结果。
代码示例3:
class A():
pass
class B():
pass
a = A()
b = B()
print(type(a) is type(b)) # True
类型比较的结果与类型A和b相同,并且结果显然不准确。例如,此经典类的类型返回相同的结果,这不是我们想要的结果。对于内置的基本类型,可
以使用tpye进行检查,但是当应用于其他情况时,类型似乎不可靠。