如何在Python中判断对象是否具有某个属性?


Python 是一种面向对象的编程语言,这里的属性被称为对象的特性。我们可以使用不同的方法来检查对象是否具有某个属性。

要检查对象是否包含特定属性,可以使用 hasattr() 方法和 getattr() 方法。如果要获取所有现有属性,可以使用 dir() 方法。(了解更多关于Python目录的信息:Python 目录教程)

首先创建一个带有两个属性的 Python 虚拟类,然后将其赋值给一个对象,本文将始终引用该对象。

class DummyClass():
    var1 = 'Value1'
    var2 = 2

obj = DummyClass()

直接访问属性

在这个例子中,我们尝试直接访问对象的属性,如果属性不存在,可能会得到一个 AttributeError。如果我们没有得到 AttributeError,那么就知道对象具有该属性。

示例

对于上述示例,对象不包含属性“a”,但包含“var1”、“var2”属性。

class DummyClass():
    var1 = 'Value1'
    var2 = 2

obj = DummyClass()
print(obj.var1)
print(obj.var2)
print(obj.a)

输出

Value1
2
Traceback (most recent call last):
  File "/home/cg/root/57371/main.py", line 8, in 
    print(obj.a)
AttributeError: 'DummyClass' object has no attribute 'a'

使用 getattr() 方法访问属性

与直接访问属性类似,getattr() 方法也返回命名属性的值(如果存在),如果属性不存在则返回 AttributeError

语法

getattr(object, name[, default])

此函数有三个参数:要查找其属性的对象名称、要检查的属性名称,以及最终的 [, default],它接受一个默认参数,如果属性不存在,则打印该参数,而不是生成 AttributeError

示例

getattr() 方法返回现有属性的值,并为不存在的属性抛出默认参数或 AttributeError

print(getattr(obj, 'var1', 'Attribute doesn't exist'))
print(getattr(obj, 'var2', 'Attribute doesn't exist'))
print(getattr(obj, 'a', 'Attribute doesn't exist'))
print(getattr(obj, 'a'))

输出

Value1
2
Attribute doesn't exist
Traceback (most recent call last):
  File "/home/cg/root/17209/main.py", line 9, in 
    print(getattr(obj, 'a'))
AttributeError: 'DummyClass' object has no attribute 'a'

使用 hasattr() 方法访问属性

hasattr() 方法检查对象是否具有特定属性。hasattr() 方法是使用 getattr() 方法实现的。

语法

hasattr(object, name )

此函数有两个参数:对象的名称和要检查的属性名称。并返回一个布尔值(True/False)。如果对象中存在该属性,则返回 'True',否则返回 'False'。

示例

obj 方法不包含“a”属性,因此返回 False。对于 var1var2 属性,它返回 True 作为输出。

class DummyClass():
    var1 = 'Value1'
    var2 = 2

obj = DummyClass()   
print(hasattr(obj, 'var1'))
print(hasattr(obj, 'var2'))
print(hasattr(obj, 'a'))

输出

True
True
False

使用 dir() 方法访问所有现有属性

dir() 方法返回一个列表,其中包含对象的所有属性,它还会返回包含在 __dict__ 属性中的键。

语法

dir(object)

对于某些对象,dir() 的结果可能不准确,因为其功能可能已使用 __getattr__ 方法修改。

示例

dir() 方法返回所有现有属性的列表。

class DummyClass():
    var1 = 'Value1'
    var2 = 2

obj = DummyClass()   
print(dir(obj))

输出

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'var1', 'var2']

更新于:2023年8月29日

22K+ 次浏览

启动您的 职业生涯

完成课程获得认证

开始学习
广告