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

如何在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']

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程