我有一个Python类,其属性名为:date1,date2,date3等.
在运行时,我有一个变量i,它是一个整数.
我想要做的是根据i的值在运行时访问适当的日期属性.
例如,
如果我== 1,我想访问myobject.date1
如果我== 2,我想访问myobject.date2
我想为类而不是属性做类似的事情.
例如,我有一堆类:MyClass1,MyClass2,MyClass3等.我有一个变量k.
如果k == 1,我想实例化一个新的MyClass1实例
如果k == 2,我想实例化一个新的MyClass2实例
我怎样才能做到这一点?
编辑
我希望避免使用巨大的if-then-else语句来选择合适的属性/类.
有没有办法在Python中使用变量的值动态编写类名?
too*_*php 34
getattr()在运行时直到您不知道其名称时,可以使用它来访问属性:
obj = myobject()
i = 7
date7 = getattr(obj, 'date%d' % i) # same as obj.date7
Run Code Online (Sandbox Code Playgroud)
如果将编号的类保留在调用的模块中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)()
Run Code Online (Sandbox Code Playgroud)
说了这么多之后,你真的应该避免这种事情,因为除了阅读整个代码库之外,你永远无法找到这些编号属性和类的使用位置.你最好把所有东西放在字典里.
对于第一种情况,您应该能够:
getattr(myobject, 'date%s' % i)
Run Code Online (Sandbox Code Playgroud)
对于第二种情况,您可以:
myobject = locals()['MyClass%s' % k]()
Run Code Online (Sandbox Code Playgroud)
但是,您首先需要这样做的事实可能表明您正以非Pythonic的方式解决问题.
| 归档时间: |
|
| 查看次数: |
11212 次 |
| 最近记录: |