Создание глобальной переменной, переданной в качестве параметра - PullRequest
0 голосов
/ 10 января 2020

Я пытаюсь создать функцию, которая бы принимала параметр, а затем делала из него глобальную переменную (точнее, экземпляр класса).

class SomeClass():
    #some stuff defined inside

def create(crt, **kwargs):
    globals()[crt] = SomeClass()
    for key, value in kwargs.items():
        if crt.__dict__.__contains__(key):
            crt.__setattr__(key, value)
    return crt

Вывод, который меня интересует, будет:

create(foo, class_attribute=10)

Это позволит мне:

foo.other_attribute = "whatever"

Я не могу передать Параметр без '', если он не определен ранее, также я не могу передать строку, потому что она сама по себе не является переменной, следовательно, она не может быть экземпляром класса.

Это вообще возможно?

1 Ответ

1 голос
/ 10 января 2020

Это плохая идея, но вот как это сделать.

Вам нужно передать имя в виде строки. Когда вы устанавливаете атрибуты, делайте это с локальной переменной, содержащей новый объект.

def create(crt, **kwargs):
    obj = SomeClass()
    for key, value in kwargs.items():
        if obj.__dict__.__contains__(key):
            obj.__setattr__(key, value)
    globals()[crt] = obj
    return obj

create('foo', class_attribute=10)
foo.other_attribute = 'whatever'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...