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。这只是我自私的好奇心,谢谢你善良的先生;