检查 Python 对象是否具有某属性

Shikha Chaudhary 2023年1月30日 2022年5月17日
  1. 在 Python 中使用 hasattr() 方法检查属性
  2. 在 Python 中使用 getattr() 函数检查属性
检查 Python 对象是否具有某属性

面向对象的编程围绕类和对象的概念展开。

每个类都有可以称为属性的方法和属性。一个对象可以获取一个类的属性,每个对象也可以有它的属性。了解对象具有哪些属性是必要的。

无法在大量代码中手动检查对象中的属性。本文将展示检查对象属性的不同方法。

在 Python 中使用 hasattr() 方法检查属性

hasattr() 函数检查对象是否具有特定属性。如果函数找到属性,则返回 true;否则,它返回 false

语法:

hasattr(object_name, attribute_name)

这个函数有两个参数——对象的名称和我们要检查的属性。该函数根据是否找到属性将输出作为布尔值 truefalse 给出。

假设我们有一个名为 Cake 的类。我们在这个类中定义了三个属性——best_cakebest_flavorcost。然后,我们创建 cake_object 作为此类的对象。

现在,要检查该对象是否具有属性 best_cake,我们使用 hasattr() 方法。将类的名称和此属性作为参数传递给此函数。

class Cake:
    best_cake = "Choco Lava"
    best_flavor = "Vanilla"
    cost = 2500
    
cake_object = Cake()
print(hasattr(Cake, 'best_cake'))

输出:

True

由于 best_cake 属性属于对象 cake_object,我们得到 True 作为输出。

现在看看如果我们将 quantity 作为属性名称会发生​​什么。

class Cake:
    best_cake = "Choco Lava"
    best_flavor = "Vanilla"
    cost = 2500
    
cake_object = Cake()
print(hasattr(Cake, 'quantity'))

输出:

False

由于属性 quantity 不存在,我们得到 False 作为输出。

在 Python 中将 hasattr() 函数与 If-Else 块一起使用

另一种使用 hasattr() 函数的方法是将它与 if-else 块一起使用。当属性存在时,hasattr() 函数返回 true

因此,if 块执行并打印属性的值。但是,如果该属性不存在,则返回的值将是 false,然后执行 else 块。

class Cake:
    best_cake = "Choco Lava"
    best_flavor = "Vanilla"
    cost = 2500
    
cake_object = Cake()
if hasattr(Cake, 'quantity'):
    print(Cake.quantity)
else:
    print("Whoops, no such attribute exists!")

输出:

Whoops, no such attribute exists!

我们在 if 块内搜索属性。由于该属性不存在,该函数返回 false 并进入 else 块。在 else 块中,我们指定一个简单的打印语句作为输出。

在 Python 中使用 getattr() 函数检查属性

getattr() 函数在属性不存在时返回默认值。getattr() 函数的工作方式与前一个相同。

语法:

getattr(object_name, attribute_name, default_value)

getattr() 函数接受三个参数 - 对象、属性和属性不存在时的默认值。

比如说,我们必须找到 cake_object 对象的 quantity 属性。在不指定默认参数的情况下,让我们使用 getattr() 函数。

class Cake:
    best_cake = "Choco Lava"
    best_flavor = "Vanilla"
    cost = 2500
    
cake_object = Cake()
print(getattr(Cake, 'quantity'))

输出:

AttributeError: type object 'Cake' has no attribute 'quantity'

getattr() 函数在这里抛出异常。

现在,让我们指定一个在属性不存在时应该打印的默认参数。这个默认参数可以是一个简单的消息。

class Cake:
    best_cake = "Choco Lava"
    best_flavor = "Vanilla"
    cost = 2500
    
cake_object = Cake()
print(getattr(Cake, 'quantity', 'Attribute not found'))

输出

Attribute not found

我们从默认参数而不是任何异常或错误中获取消息。

Getattr() 函数与 Try-Except 块一起使用

还有另一种使用 getattr() 函数的方法。使用 try-catch 块来检查属性的存在。这个想法是在 try 块中包含 getattr() 函数。

如果该属性存在,我们将打印其值。否则,将抛出 AttributeError。我们可以在 catch 块中处理此异常并使用 print 语句打印错误消息。

在本例中,我们在 try 块中搜索 quantity 属性。我们没有在 getattr() 函数中指定默认参数。

这是因为我们在 except 块内处理错误。

class Cake:
    best_cake = "Choco Lava"
    best_flavor = "Vanilla"
    cost = 2500
    
cake_object = Cake()
try:
    print(getattr(Cake, 'quantity'))
except AttributeError:
    print("Whoops, this attribute is not present!")

输出:

Whoops, this attribute is not present!

我们不能像 getattr() 函数那样将 hasattr() 函数与 try-catch 块一起使用。这是因为 hasattr() 函数返回布尔值而不是异常。

总结

我们讨论了在 Python 中查找属性是否存在于对象中。我们使用了两个函数 - hasattr()getattr() 来实现这一点。

我们学会了将 hasattr() 函数与 if-else 块以及 getattr() 函数与 try-except 块结合。

相关文章 - Python Object