type()
type() 函数用于返回一个对象的数据类型。它不仅可以用来检查基本数据类型(如整数、字符串等),还可以用于确定自定义类的实例类型。
语法
type(object)
示例
print(type(123)) #
print(type("hello")) #
print(type([1, 2, 3])) #
class MyClass:
pass
obj = MyClass()
print(type(obj)) #
isinstance()
isinstance() 函数用于检查一个对象是否是指定类型或其子类的实例。这比直接使用 type() 更加灵活,因为它支持继承关系的检查。
语法
isinstance(object, classinfo)
object: 要检查的对象。
classinfo: 类或类型元组,也可以是类型对象的元组。
示例
class Animal:
pass
class Dog(Animal):
pass
dog = Dog()
print(isinstance(dog, Dog)) # True
print(isinstance(dog, Animal)) # True
print(isinstance(dog, (Dog, Animal))) # True
print(isinstance(dog, str)) # False
getattr()
getattr() 函数用于获取对象的属性值。如果指定的属性不存在,则可以提供一个默认值。这对于安全地访问可能不存在的属性特别有用,避免了引发异常。
语法
getattr(object, name[, default])
object: 要从中获取属性的对象。
name: 属性名(字符串形式)。
default: 可选参数,当属性不存在时返回的默认值。
示例
class Person:
def __init__(self, name):
self.name = name
person = Person("Alice")
print(getattr(person, "name")) # Alice
print(getattr(person, "age", "未知")) # 未知
hasattr()
hasattr() 函数用于检查对象是否有指定的属性。它返回一个布尔值,表示该属性是否存在。
语法
hasattr(object, name)
object: 要检查的对象。
name: 属性名(字符串形式)。
示例
class Person:
def __init__(self, name):
self.name = name
person = Person("Alice")
print(hasattr(person, "name")) # True
print(hasattr(person, "age")) # False
错误处理与最佳实践
使用上述函数时,遵循一些最佳实践可以使代码更健壮:
优先使用 isinstance():相比于 type(),isinstance() 更推荐用于类型检查,因为它能够正确处理继承关系。
结合 getattr() 和默认值:当您不确定某个对象是否具有特定属性时,使用 getattr() 并提供一个默认值是一个很好的习惯,这样即使属性不存在也不会导致程序崩溃。
利用 hasattr() 进行预检查:在尝试访问属性之前,可以先用 hasattr() 检查属性是否存在,从而提前避免潜在的 AttributeError 异常。
考虑使用 try-except 结构:有时直接尝试访问属性并在失败时捕获异常可能是更简洁的方法,尤其是在处理多个属性或复杂的逻辑时。
了解 Python 的鸭子类型:Python 支持“鸭子类型”,即如果一个对象表现得像某种类型(例如实现了所需的方法),那么它就可以被当作那种类型来使用。在这种情况下,过于严格的类型检查可能会限制灵活性。