TEL:400-8793-956
当前位置:程序、服务器

为什么在Python判断变量类型时不推荐type方法

提问者:网民 近期获赞:21 浏览人数:422 发布时间:2020-12-09 09:54:11

 问:使用类型()的方法判断变量,结果是鄙视了那只老鸟,我不知道为什么。

请您解释:问题出在哪里,如何判断变量的类型是个好方法?
 
>>> 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进行检查,但是当应用于其他情况时,类型似乎不可靠。
上一篇: PHP开发中应避免哪些不良编程习惯
下一篇: 如何提高比较大量字符串的速度