Python 创建作为参数传递的全局变量

Python 创建作为参数传递的全局变量,python,dynamic,parameters,global-variables,Python,Dynamic,Parameters,Global Variables,我正在尝试创建一个函数,它将获取一个参数,然后从中生成一个全局变量,更精确地说是一个类的实例 class SomeClass(): #some stuff defined inside def create(crt, **kwargs): globals()[crt] = SomeClass() for key, value in kwargs.items(): if crt.__dict__.__contains__(key):

我正在尝试创建一个函数,它将获取一个参数,然后从中生成一个全局变量,更精确地说是一个类的实例

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"
如果参数没有在前面定义,我就不能传递它,我也不能传递字符串,因为它本身不是变量,因此它不能是类的实例

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

这可能吗?

这是个坏主意,但下面是如何做到的

您需要将名称作为字符串传递。设置属性时,请在包含新对象的局部变量上进行设置

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'

您可以将全局变量定义为None,然后将其重新定义为您的类。在使用全局变量之前请三思。过度使用globals是设计不佳的症状。几乎任何全局关键字的使用都表明设计不佳。全局变量可以通过代码的任何部分进行更改,这使得很难记住或解释每个可能的用法。如果要动态创建变量,它必须是字符串。Python不允许通过引用传递变量。如果您认为需要动态变量,通常是错误的。对动态变量使用dict、list或df这正是我所缺少的。关于这是一个坏主意——重点是,我还不知道我到底该如何使用它,如果这样做真的更安全的话,也许我真的会使用dict。这只是我自私的好奇心,谢谢你善良的先生;