Python class 通过传递变量声明

Python class declare by passing variables

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

我在下面放了一个简单的例子来展示我想要的。请帮助我处理这个问题。

成功

temp = catalog.TEST
temp = catalog.PROD

不起作用,它传递字符串 "i" 而不是列表元素作为属性

lists = ['TEST,'PROD']
for i in lists:
    temp = catalog.i

完整代码 我正在使用 dremio-client 这个包 (https://dremio-client.readthedocs.io/en/latest/readme.html)

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
b = catalog.PROD
# Cannot pass the list element to object "catalog" 
list = ["TEST","PROD"]
for i in list
   temp = catalog.i

感谢 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".split('.') 会变成 ["TEST", "DEMO"]
不确定它是否可行,但我只是想展示主要思想。