gpt4 book ai didi

python - 如何在 Python 中动态组合和访问类属性?

转载 作者:IT老高 更新时间:2023-10-28 20:44:32 25 4
gpt4 key购买 nike

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

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

我要做的是根据 i 的值在运行时访问适当的日期属性。

例如,

如果 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 - 如何在 Python 中动态组合和访问类属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3286089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com