如何使用 eval 函数获取下面的代码来打印 obj2 的变量(即数据框,df)。示例代码如下:
import pandas as pd
class Sample:
def __init__(self):
self.df = pd.DataFrame({'num_legs': [2, 4, 8, 0],
'num_wings': [2, 0, 0, 0],
'num_specimen_seen': [10, 2, 1, 8]},
index=['falcon', 'dog', 'spider', 'fish'])
def print(self):
eval("obj2.df.head()")
def main():
obj1 = Sample()
obj2 = Sample()
obj2.print()
if __name__ == '__main__':
main()
当我尝试运行该程序时,它抛出以下错误:
名称错误:名称“obj2”未定义
我需要使用 eval 函数访问属于 obj2 的 df 变量。
代替
eval()
,使用 getattr()
通过名称获取对象的属性;然后你就可以像往常一样用它做任何你喜欢的事情:
import pandas as pd
class Sample:
def __init__(self):
self.df1 = pd.DataFrame({"foo": [1, 2, 3], "bar": [4, 5, 6]})
self.df2 = pd.DataFrame({"baz": [7, 8, 9], "quux": [10, 11, 12]})
def head_df(self, obj_name):
assert obj_name.startswith("df") # sanity check
df = getattr(self, obj_name)
print(df.head())
def main():
sample = Sample()
sample.head_df("df1")
sample.head_df("df2")
if __name__ == '__main__':
main()