只需在python中编写一次对象名称即可调用对象的所有属性

时间:2018-07-21 15:59:48

标签: python

所以最近我正在使用matplotlib,这是我的代码

    import matplotlib.pyplot as plt 
    plt.plot([1,2,3] ,[2,4,6], label="line")
    plt.xlabel("x")
    plt.ylabel("y")
    plt.title("Interesting graph")
    plt.legend()
    plt.show()

现在,因为我不得不写这份 plt。。我觉得每一次都是多余的

所以我的问题有什么办法,只有一次我必须编写plt时,我只要编写方法名称就可以调用所有方法

这是我想要在python中使用的东西的一个例子

with plt :
    plot([1,2,3] ,[2,4,6], label="line")
    xlabel("x")
    ylabel("y")
    title("Interesting graph")
    legend()

plt.show()

如果python中没有这样的内容,我可以在python想法邮件列表中建议吗?

2 个答案:

答案 0 :(得分:0)

我同意上面的评论,但是如果由于某些原因您确实需要/想要一种方法来描述,可以使用OrderedDict来保留要调用的每个函数的顺序。并将这些值用作参数,然后使用getattr动态地进行函数调用。

当您有关键字参数时,它会变得有点混乱,但是如果您确实需要它,这是一个很棘手的答案。希望对您有帮助!

import matplotlib.pyplot as plt 
from collections import OrderedDict


def call_these_funcs_with_args(mod,ordered_funcs_and_args):
    """
    calls the functions provided as keys with the values provided as arguments
    for the module provided
    """

    for attr,args in attrs_and_args.iteritems():
        if attr in dir(mod):
            args = attrs_and_args[attr]
            if isinstance(args,list):
                getattr(mod,attr)(*args)
            elif args:
                getattr(mod,attr)(args)
            else:
                getattr(mod,attr)()
            if "{}_kwargs".format(attr) in attrs_and_args.keys() and isinstance(args,list):
                kwargs = attrs_and_args["{}_kwargs".format(attr)]
                getattr(mod,attr)(*args,**kwargs)


attrs_and_args = OrderedDict(
                 {'plot':[[1,2,3],[2,4,6]],
                  'plot_kwargs': {'label':'line'},
                  'xlabel':"x",
                  'ylabel':"y",
                  'title':"Interesting Graph",
                  'legend':None}
                  )


call_these_funcs_with_args(plt,attrs_and_args)
plt.show()

答案 1 :(得分:0)

  1. 这会降低可读性-因此要理解某一行代码,您需要随时向上滚动
  2. 名称冲突会更频繁地发生
  3. 代码将变得更加难以反应

替代方法是使用没有这种缺点的方法链接(或“返回自身”)。但是这种方法仅适用于方法调用。