如何在Python中实现类似Ruby的.class判断字面量(literal)类型?
在Python中判断字面量类型的方法
嘿,这个问题我太懂了!Ruby里用.class获取字面量类型,在Python里有几个对应的实用方式,最常用的是这两个:
1. type()函数——最接近Ruby的.class
这是最直接的替代方案,它会返回字面量所属的精确类对象,和Ruby里.class的行为几乎一致。用法非常简单,直接把字面量作为参数传入就行:
# 整数字面量 print(type(123)) # 输出 <class 'int'> # 字符串字面量 print(type("Python")) # 输出 <class 'str'> # 浮点数字面量 print(type(3.14)) # 输出 <class 'float'> # 列表字面量 print(type([1, 2, 3])) # 输出 <class 'list'> # 字典字面量 print(type({"key": "val"})) # 输出 <class 'dict'> # 布尔字面量 print(type(False)) # 输出 <class 'bool'>
如果想直接拿到类的名称字符串,再加个.name即可:
print(type(123).name) # 输出 'int'
2. isinstance()函数——考虑继承关系的判断
如果你的需求是判断字面量是否属于某个类型(包括子类),那isinstance()会更合适。比如在Python里,bool是int的子类,用isinstance(True, int)会返回True,但type(True) is int会返回False——这一点和Ruby的.class有区别,Ruby里true.class只会返回TrueClass,不会考虑继承层级。
举个例子:
print(isinstance(True, int)) # 输出 True print(type(True) is int) # 输出 False print(isinstance(42, object)) # 输出 True(所有Python对象都是object的子类)
总结一下:如果只是想获取字面量的精确类型,用type()就完全对应Ruby的.class;如果需要判断类型归属(含继承),就用isinstance()。
内容的提问来源于stack exchange,提问作者user130268
相关产品推荐
相关产品推荐

