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

如何在Python中动态组成和访问类属性?

柳刚豪
2023-03-14
问题内容

我有一个Python类,其属性名为:date1,date2,date3等。

在运行时,我有一个变量i,它是一个整数。

我想要做的是基于i的值在运行时访问适当的date属性。

例如,

如果i == 1,我想访问myobject.date1

如果i == 2,我想访问myobject.date2

我想为类而不是属性做类似的事情。

例如,我有一堆类:MyClass1,MyClass2,MyClass3等。我有一个变量k。

如果k == 1,我想实例化MyClass1的新实例

如果k == 2,我想实例化MyClass2的新实例

我怎样才能做到这一点?

编辑

我希望避免使用巨大的if-then-else语句来选择适当的属性/类。

在Python中,有没有一种方法可以使用变量的值即时组成类名?


问题答案:

getattr()当您在运行时不知道属性名称时,可以使用它来访问属性:

obj = myobject()
i = 7
date7 = getattr(obj, 'date%d' % i) # same as obj.date7

如果将编号的类保存在名为的模块中foo,则可以getattr()再次使用来按编号访问它们。

foo.py:
  class Class1: pass
  class Class2: pass
  [ etc ]


bar.py:
  import foo
  i = 3
  someClass = getattr(foo, "Class%d" % i) # Same as someClass = foo.Class3
  obj = someClass() # someClass is a pointer to foo.Class3
  # short version:
  obj = getattr(foo, "Class%d" % i)()

说了这么多,您 真的 应该避免这种事情,因为除非通读整个代码库,否则您将永远无法找出这些编号的属性和类在何处使用。您最好将所有内容都放入字典中。



 类似资料:
  • 问题内容: 假设我创建了一个类的实例,并想为其公共属性分配一些值。通常,这将是这样完成的: 但是,如果编写一个将类作为参数的函数,而我想动态地为该类的公共属性分配一些值,那就是通过变量和循环(不知道有多少个或被称为什么)。 ) 显而易见的是: 但这是行不通的。 有任何想法吗? 问题答案:

  • 问题内容: 如果我有以下python代码: 它抱怨 如何bar在方法中访问类/静态变量? 问题答案: 代替bar使用或。分配给将创建一个静态变量,分配给将创建一个实例变量。

  • 问题内容: 如果我有以下python代码: 它抱怨 如何在方法中访问类/静态变量? 问题答案: 代替使用或。分配给将创建一个静态变量,分配给将创建一个实例变量。

  • 在Java和Android中,我们可以这样做: 这样,在其他地方,我们就可以做到这一点: //编辑也许我应该说得更清楚些。我的意思是我们如何才能用Kotlin写上面的内容,用Kotlin。

  • 问题内容: 目标是创建一个行为类似db结果集的模拟类。 因此,例如,如果数据库查询使用表达式返回,那么我想看看: 刚开始我以为我可以这样做: 但返回一个属性对象。 用替换该行根本没有用。 那么在运行时创建实例属性的正确方法是什么? 问题答案: 我想我应该扩大这个答案,因为我年纪大一些并且比较聪明,并且知道发生了什么事。迟到总比不到好。 你可以动态地向类添加属性。但这很重要:你必须将其添加到类中。