Python类通过传递变量进行声明

Python类通过传递变量进行声明,python,class,attributes,getattr,dremio,Python,Class,Attributes,Getattr,Dremio,我试图通过传递变量来创建一个对象,但它似乎不起作用 我在下面举了一个简单的例子来说明我想要什么。请帮我处理这个问题 成功地 temp = catalog.TEST temp = catalog.PROD 不起作用,它传递字符串“i”而不是列表元素作为属性 lists = ['TEST,'PROD'] for i in lists: temp = catalog.i 完整代码 我正在使用dremio客户端这个包() 谢谢Pavel的解答,但我还有一个更复杂的问题 list = ["TE

我试图通过传递变量来创建一个对象,但它似乎不起作用

我在下面举了一个简单的例子来说明我想要什么。请帮我处理这个问题

成功地

temp = catalog.TEST
temp = catalog.PROD
不起作用,它传递字符串“i”而不是列表元素作为属性

lists = ['TEST,'PROD']
for i in lists:
    temp = catalog.i
完整代码 我正在使用dremio客户端这个包()

谢谢Pavel的解答,但我还有一个更复杂的问题

list = ["TEST","TEST.DEMO"]

# what's work - directly declare
test = catalog.TEST.DEMO

# works for "TEST" not works for TEST.DEMO
for i in list:
    temp = getattr(catalog, i)

执行
temp=catalog.i
操作时,实际上是试图设置
catalog
的属性
i
,而不是变量
i
下的值

您可以尝试改用
getattr

import dremio_client as dc
mydremio = dc.init(os.getcwd() + '/.config')
catalog = mydremio.data
# TEST and PROD are the folders that exist in my dremio server
a = catalog.TEST
对于第二种情况,您可以尝试执行以下操作:

for i in list:
    fields = i.split('.')
    temp = catalog
    for field in fields:
        temp = getattr(temp, field)
我在这里所做的是将
I
符号拆分,以创建我需要访问的字段列表。
因此,
“TEST.DEMO”。拆分('.')
将成为
[“TEST”,“DEMO”]


我不确定它是否有效,但我只是想展示一下主要思想。

谢谢Pavel,它有效,但我还有其他问题要问。我只是更新我的问题。
for i in list:
    fields = i.split('.')
    temp = catalog
    for field in fields:
        temp = getattr(temp, field)