在Python中使用eval访问对象

问题描述 投票:0回答:1

如何使用 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 变量。

python pandas eval
1个回答
1
投票

代替

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()
© www.soinside.com 2019 - 2024. All rights reserved.