如何使用名称列表来使用类来实例化变量?

时间:2017-04-29 22:01:45

标签: python class loops global instantiation

警告:此问题不是旧"How do I create a bunch of variables in a loop?"的副本,因为它使用带参数的特殊类。如果对PEP8主动不尊重的代码让你的眼睛流血,那就去吧!旅行者!

好的,我正在为详细网络中的对象图编写一些代码,我希望代码本身看起来特别。出于这个问题的目的,这意味着我不想编写代码,以便我引用一个字典,其中包含在引用我的特殊类的实例的循环中生成的键。我想以最小的方式编写代码,我知道它是非Pythonic,但我可怕的心理构成可以接受。

那么:如何编写下面显示的函数instantiate的代码?我们的想法是,这个函数使用具有一些参数的特殊类Relay实例化一个名称指定的变量。

import uuid

def generate_Python_variable_names(
    number = 10
    ):

    names = []
    while len(names) < number:
        name = str(uuid.uuid4()).replace("-", "")
        if name[0].isalpha():
            names.append(name)

    return names

number_relays = 100

for name in generate_Python_variable_names(number = number_relays):
    instantiate(name, Relay(configuration = 1)

1 个答案:

答案 0 :(得分:1)

我假设您处于模块级别。您想要的是在当前模块中创建新变量。

为此,您可以使用globals()功能访问模块的变量。

for name in generate_Python_variable_names(number=number_relays):
    obj = globals()
    obj[name] = Relay(configuration=1)

如果您打印变量,您将得到如下内容:

{'Relay': <class '__main__.Relay'>,
 '__builtins__': <module '__builtin__' (built-in)>,
 '__doc__': None,
 '__file__': 'path/to/your/module.py',
 '__name__': '__main__',
 '__package__': None,
 'df55cd5884924e88a4a13371b248d755': <__main__.Relay object at 0x105f66fd0>,
 'e11d3a1e3afb4ada801e08d57219e9be': <__main__.Relay object at 0x105f66550>,
 ...
 'ef93466af4a34e7b8ec28568cca664f5': <__main__.Relay object at 0x105f66ed0>,
 'generate_Python_variable_names': <function generate_Python_variable_names at 0x105f670c8>,
 'name': 'ef93466af4a34e7b8ec28568cca664f5',
 'number_relays': 100,
 'obj': <Recursion on dict with id=4394090856>,
 'uuid': <module 'uuid' from 'path/to/uuid.pyc'>}

如您所见,您的模块中有一百个新变量。