当前位置: 首页 > 面试题库 >

如何创建对象并为其添加属性?

陈斌
2023-03-14
问题内容

我想在Python中创建一个动态对象(在另一个对象内部),然后向其添加属性。

我试过了:

obj = someobject
obj.a = object()
setattr(obj.a, 'somefield', 'somevalue')

但这没用。

有任何想法吗?

编辑:

我正在从for循环遍历值列表的循环中设置属性,例如

params = ['attr1', 'attr2', 'attr3']
obj = someobject
obj.a = object()

for p in params:
   obj.a.p # where p comes from for loop variable

在上面的例子中,我会得到obj.a.attr1obj.a.attr2obj.a.attr3

我使用该setattr函数是因为我不知道如何obj.a.NAMEfor循环中进行操作。

如何根据上例中的值设置属性p


问题答案:

您可以使用我古老的Bunch配方,但是如果您不想创建“绑定类”,则Python中已经存在一个非常简单的类-
所有函数都可以具有任意属性(包括lambda函数)。因此,以下工作:

obj = someobject
obj.a = lambda: None
setattr(obj.a, 'somefield', 'somevalue')

与古老的Bunch食谱相比,清晰度是否还可以,这是一个样式决定,我当然会留给您。



 类似资料:
  • 我想创建一个对象动态,例如在JavaFX中的一个圆。我的代码会像这样。 我现在的问题是如何增加每个圆的独特性。例如,如果我要添加每个圆的不同颜色和大小。我该如何实现呢?请帮忙。

  • 我想使用aws-sdk节点JS为S3 bucket中的某些对象设置不同的过期日期。为此,我使用了和。据我所知,我使用了不同的前缀(=对象名)来为不同的对象设置过期日期。但这种方法不是在创造新的生命周期,而是在取代现有的生命周期。 在AWS文档中:https://docs.AWS.amazon.com/awsjavascriptsdk/latest/AWS/s3.html#PutBucketLife

  • 我想要得到一个这样的对象: 通过这样编码: 但我总是得到以下几点:

  • 为什么我们创建一个类的对象,而分配给不同类的引用类型。我有两个类,分别是Employee和Student,创建对象的目的是什么 这是怎么工作的?在什么情况下我们创建这样的对象?

  • 问题内容: 这件事困扰了我一段时间。我为什么不能做: …虽然我可以执行以下操作? 这是什么规则?您能给我介绍一下吗? 问题答案: 您可以向具有的任何对象添加属性。 例如,没有它。 字符串和其他简单的内置对象也没有它。 使用类也没有它。 除非前面的声明适用,否则用定义的类都具有它。 如果使用/的对象没有/ ,通常是为了节省空间。例如,如果有一个命令,那就太过分了- 想象一下一个非常短的字符串的膨胀程

  • 出于业务逻辑的原因,我希望能够创建一个具有属性的对象。但我显然不能 因为是在Python中具有特殊含义的保留关键字。但是,使用或动态获取属性也存在同样的问题。我可以这样做吗,还是必须让属性名?