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