如何检查变量类型是否为原始类型?

51 投票
8 回答
50917 浏览
提问于 2025-04-16 19:48

我不知道怎么检查一个变量是不是基本类型。在Java中是这样做的:

if var.isPrimitive():

8 个回答

33

在Python中,所有东西都是对象;甚至整数和布尔值也是。所以如果你说的“原始类型”是指“不是对象”的话(就像在Java中那样使用这个词),那么在Python里是没有这种类型的。

如果你想知道某个值(记住,在Python中变量没有类型,只有值有类型)是否是整数、浮点数、布尔值或者你认为的“原始类型”,你可以这样做:

 if type(myval) in (int, float, bool, str ...):
      # Sneaky stuff

(我还需要提一下,类型本身也是对象,并且有自己的类型吗?)

如果你还需要考虑那些继承了内置类型的类型,可以看看内置的isinstance()函数。

Python的高手们通常会写出尽量少假设输入类型的代码。允许这种灵活性是Python的一大优点:这常常让代码以意想不到的方式工作。所以你可能想避免写出在类型之间做任意区分的代码。

35

大家都说,Python里没有原始数据类型。但我觉得,这就是你想要的东西。

def isPrimitive(obj):
    return not hasattr(obj, '__dict__')

isPrimitive(1) => True
isPrimitive("sample") => True
isPrimitive(213.1311) => True
isPrimitive({}) => True
isPrimitive([]) => True
isPrimitive(()) => True


class P:
    pass

isPrimitive(P) => False
isPrimitive(P()) => False

def func():
    pass

isPrimitive(func) => False
45

因为Python没有原始类型,所以你需要自己定义什么是原始类型:

primitives = (bool, str, int, float, type(None))

def is_primitive(obj):
    return isinstance(obj, primitives)

那么,你是否认为从原始类型继承的类的实例也算是原始类型呢?比如:

class MyStr(str):
    ...

如果你想把MyStr()排除在原始类型之外,你可以这样做:

def is_primitive(obj):
    return type(obj) in primitives

撰写回答