使用python

时间:2015-10-21 19:57:42

标签: python python-2.7 class oop object

我想定义一个函数,它接受名称,类型和参数列表(类)作为输入,并创建给定类型的类的实例和给定名称的指定参数。并将其保存在名称为键值的字典中如何操作? 我尝试过使用

return globals()['name']=globals()['type](globals("".join(list_of_parameter)))

但它无效我甚至尝试使用eval()

而不是globals(),但它也不起作用。

(名称和类型是字符串list_of_parameters是字符串列表,其中每个字符串是变量或对象)

3 个答案:

答案 0 :(得分:0)

虽然有更多无所不包的方法可以做到这一点,但如果你最终实例化一个你不期望的类,那将是非常危险的。

实现此目的的一种简单方法是使用允许此代码实例化的所有类的字典,例如:

In [1]: class_dict = { "int" : int, "str" : str }

In [2]: args = [1]

In [3]: i = class_dict["int"](*args)

In [4]: i
Out[4]: 1

In [5]: args = ["test"]

In [6]: s = class_dict["str"](*args)

In [7]: s
Out[7]: 'test'

答案 1 :(得分:0)

使用

怎么样?

exec("...", globals(), locals())

注意globals()和locals()。 " ..."代表python语法中的类init。

exec执行代码,globals和locals是exec中执行的代码不是" catched"在exec-namespace中。

答案 2 :(得分:0)

您不应将变量(包括类)的名称用作数据。如果您需要能够通过特定字符串引用给定值(例如,类),请将其放在以字符串作为键的字典中。这样您就可以确切地知道数据可以引用的内容。

所以,尝试这样的事情:

def call_func_in_namespace(callable_name, arg_names, namespace):
    args = (namespace[name] for name in arg_names)
    return namespace[callable_name](*args)

您可以通过以下方式调用它:

namespace = {"int": int, "base": 3, "val": "212102"}

result = call_func_in_namespace("int", ("val", "base"), namespace)

您可以尝试多种变体,具体取决于您的实际用途。例如,可调用和参数可以来自不同的名称空间。我强烈建议您不要使用globals()作为命名空间。