在 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()
返回。True
False
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 |
要从对象中删除的属性的名称 |