检查 Python 对象是否具有某属性
面向对象的编程围绕类和对象的概念展开。
每个类都有可以称为属性的方法和属性。一个对象可以获取一个类的属性,每个对象也可以有它的属性。了解对象具有哪些属性是必要的。
无法在大量代码中手动检查对象中的属性。本文将展示检查对象属性的不同方法。
在 Python 中使用 hasattr()
方法检查属性
hasattr()
函数检查对象是否具有特定属性。如果函数找到属性,则返回 true
;否则,它返回 false
。
语法:
hasattr(object_name, attribute_name)
这个函数有两个参数——对象
的名称和我们要检查的属性
。该函数根据是否找到属性将输出作为布尔值 true
或 false
给出。
假设我们有一个名为 Cake
的类。我们在这个类中定义了三个属性——best_cake
、best_flavor
和 cost
。然后,我们创建 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
块结合。