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"]
不确定它是否可行,但我只是想展示主要思想。
我尝试通过传递变量来创建一个对象,但它似乎不起作用。
我在下面放了一个简单的例子来展示我想要的。请帮助我处理这个问题。
成功
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"]
不确定它是否可行,但我只是想展示主要思想。