在 Python 中通过字符串访问对象属性

在 Python 中通过字符串访问对象属性

Access object attribute by String in Python

使用该getattr()函数通过字符串访问对象属性,例如
getattr(object, 'attribute_name'). getattr()函数返回对象提供的属性的值。

主程序
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def get_name(self): return self.name emp1 = Employee('bobbyhadz', 100) # ✅ get object attribute by string name print(getattr(emp1, 'name')) # 👉️ bobbyhadz print(getattr(emp1, 'salary')) # 👉️ 100 # ------------------------------------------ # ✅ get object method by string name method = getattr(emp1, 'get_name') print(method()) # 👉️ bobbyhadz # ------------------------------------------ # ✅ set object attribute by string name setattr(emp1, 'language', 'Python') print(getattr(emp1, 'language')) # 👉️ Python

我们使用该getattr()函数来访问给定字符串名称的对象的属性。

如果您需要在方法内部访问对象的属性,您可以将self其作为第一个参数传递给getattr().

getattr()函数还可用于使用字符串名称访问对象的方法。

getattr函数返回对象提供的属性的值。

该函数采用以下参数:

姓名 描述
目的 应检索其属性的对象
姓名 属性的名称
默认 对象上不存在该属性时的默认值
getattr()如果您需要为属性不存在时指定默认值,则可以将第三个参数传递给该函数。
主程序
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def get_name(self): return self.name emp1 = Employee('bobbyhadz', 100) print(getattr(emp1, 'another', None)) # 👉️ None

具有所提供名称的属性不存在,因此
None返回默认值。

通过提供字符串名称,可以使用相同的语法来访问方法。
主程序
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def get_name(self): return self.name emp1 = Employee('bobbyhadz', 100) method = getattr(emp1, 'get_name') print(method()) # 👉️ bobbyhadz

getattr()函数返回指定的方法,因此我们必须使用另一组括号来调用该方法。

setattr()如果需要在对象上设置属性,则可以使用该函数。

主程序
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary emp1 = Employee('bobbyhadz', 100) setattr(emp1, 'language', 'Python') print(getattr(emp1, 'language')) # 👉️ Python

setattr函数向对象添加属性。

该函数采用以下 3 个参数:

姓名 描述
目的 添加属性的对象
姓名 属性的名称
价值 属性值

name字符串可以是现有的或新的属性。

setattr()方法还可用于更新现有属性的值。

主程序
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def get_name(self): return self.name emp1 = Employee('bobbyhadz', 100) setattr(emp1, 'salary', 150) print(getattr(emp1, 'salary')) # 👉️ 150

salary属性已存在于对象中,因此它的值得到更新。

hasattr()如果需要检查给定字符串名称的对象的属性是否存在,则可以使用该函数。
主程序
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def get_name(self): return self.name emp1 = Employee('bobbyhadz', 100) print(hasattr(emp1, 'another')) # 👉️ False if hasattr(emp1, 'salary'): print(getattr(emp1, 'salary')) # 👉️ 100

hasattr函数采用以下 2 个参数

姓名 描述
object 我们要测试属性是否存在的对象
name 对象中要检查的属性的名称
如果字符串是对象属性之一的名称,则函数返回,否则hasattr()返回TrueFalse

delattr()如果需要删除给定字符串名称的对象的属性,则可以使用该函数。

主程序
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def get_name(self): return self.name emp1 = Employee('bobbyhadz', 100) delattr(emp1, 'salary') print(hasattr(emp1, 'salary')) # 👉️ False

delattr函数从对象删除给定的属性。

delattr函数采用以下 2 个参数:

姓名 描述
object 我们要从中删除属性的对象
name 要从对象中删除的属性的名称

发表评论