在 Python 中向对象添加属性

在 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() 向对象添加属性

向对象添加属性:

  1. 使用SimpleNamespace类创建对象。
  2. 使用该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应该是您的首选方法。

发表评论