在 Python 中向对象添加属性
Add attributes to an Object in Python
使用该setattr()
函数向对象添加属性,例如
setattr(obj, 'name', 'value')
. 该setattr
函数以一个对象、属性名称及其值作为参数,并将指定的属性添加到该对象。
主程序
class Employee(): def __init__(self, name): self.name = name emp1 = Employee('bobby') setattr(emp1, 'salary', 100) setattr(emp1, 'age', 30) print(getattr(emp1, 'salary')) # 👉️ 100 print(getattr(emp1, 'age')) # 👉️ 30 print(getattr(emp1, 'name')) # 👉️ bobby
我们实例化了Employee()
类并使用setattr()
函数为对象添加属性。
setattr函数向对象添加属性。
该函数采用以下 3 个参数:
姓名 | 描述 |
---|---|
目的 | 添加属性的对象 |
姓名 | 属性的名称 |
价值 | 属性值 |
该name
字符串可以是现有的或新的属性。
如果需要创建通用对象,请使用pass
类中的语句。
主程序
class GenericClass(): pass obj1 = GenericClass() setattr(obj1, 'salary', 100) setattr(obj1, 'age', 30) print(getattr(obj1, 'salary')) # 👉️ 100 print(getattr(obj1, 'age')) # 👉️ 30
pass 语句
什么都不做,当语法上需要语句但程序不需要任何操作时使用。
确保您的类不从内置
对象类扩展。
该类
object
没有__dict__
属性,因此我们不能将属性分配给该类的实例。您还可以使用点表示法向对象添加属性。
主程序
class GenericClass(): pass obj1 = GenericClass() obj1.salary = 100 obj1.age = 30 print(getattr(obj1, 'salary')) # 👉️ 100 print(getattr(obj1, 'age')) # 👉️ 30 print(obj1.salary) # 👉️ 100 print(obj1.age) # 👉️ 30
使用点符号等同于使用setattr()
方法。
但是,在使用点表示法时,您可能会收到在方法外部定义属性的 linting 警告__init__()
。
for
如果需要向对象添加多个属性,则可以使用循环。
主程序
class GenericClass(): pass my_dict = {'name': 'bobbyhadz', 'age': 30} obj1 = GenericClass() for key, value in my_dict.items(): setattr(obj1, key, value) print(getattr(obj1, 'name')) # 👉️ bobbyhadz print(getattr(obj1, 'age')) # 👉️ 30
我们使用for
循环遍历字典的项目并将键值对作为属性添加到对象。
如果您必须
setattr
在类方法中使用该方法,您将self
作为第一个参数传递。主程序
class GenericClass(): def __init__(self, dictionary): for key, value in dictionary.items(): setattr(self, key, value) my_dict = {'name': 'bobbyhadz', 'age': 30} obj1 = GenericClass(my_dict) print(getattr(obj1, 'name')) # 👉️ bobbyhadz print(getattr(obj1, 'age')) # 👉️ 30
SimpleNamespace
如果需要创建可以添加属性的通用对象,也可以使用该类。
使用 SimpleNamespace() 向对象添加属性
向对象添加属性:
- 使用
SimpleNamespace
类创建对象。 - 使用该
setattr()
函数向对象添加属性。
主程序
from types import SimpleNamespace obj1 = SimpleNamespace() setattr(obj1, 'salary', 100) setattr(obj1, 'language', 'Python') print(getattr(obj1, 'salary')) # 👉️ 100 print(getattr(obj1, 'language')) # 👉️ Python print(obj1) # 👉️ namespace(salary=100, language='Python')
SimpleNamespace
类是对象的子类,并提供对其命名空间的属性访问。
我们不能将属性添加到内置object
类的实例,但是,我们可以将属性添加到SimpleNamespace
类的实例。
该类也可以使用关键字参数进行初始化。
主程序
from types import SimpleNamespace obj1 = SimpleNamespace(name='bobby', age=30) setattr(obj1, 'salary', 100) setattr(obj1, 'language', 'Python') print(getattr(obj1, 'salary')) # 👉️ 100 print(getattr(obj1, 'language')) # 👉️ Python print(getattr(obj1, 'name')) # 👉️ bobby print(getattr(obj1, 'age')) # 👉️ 30 # 👇️ namespace(name='bobby', age=30, salary=100, language='Python') print(obj1)
当SimpleNamespace
您需要创建一个可以添加属性的空白对象时,该类非常方便。
不能将属性添加到内置object
类,因此这
SimpleNamespace
应该是您的首选方法。