我想知道是否有某种python变量(不是自定义类)会支持以下代码:
a = some_creation_procedure
a.variable_a = 1
a.variable_b = 2
a.variable_c = 3
print ("{}, {}, {}".format(a.variable_a, a.variable_b, a.variable_c))
输出 -
[1, 2, 3]
我可以创建一个自定义类并使用“get_attribute”函数支持它,但我想知道是否有内置支持。
动机:
我想调试一个类中的某个函数(这需要很多操作/变量来初始化),所以我想创建一个子类实例,它具有与该特定函数相对应的变量(并将其作为自身发送)对于那个特定的功能)。
例如:
class some_class():
def __init__(var1, var2, var3, var4 , ....):
do_a()
do_b()
and so on...
def minimal_func(self):
print (self.var1)
my_variable.var1 = "a"
some_class.minimal_func(my_variable)
答案 0 :(得分:4)
最简单的方法是一个没有任何内容的类:
class Namespace: pass
a = Namespace()
a.variable_a = 1
a.variable_b = 2
a.variable_c = 3
print ("{}, {}, {}".format(a.variable_a, a.variable_b, a.variable_c))
打印:
1, 2, 3
正如@James在评论中所说:
类对象的实例可以动态分配给它们的属性。有一些方法可以限制属性分配,但默认情况下,您可以只分配任何内容
正如@ Aran-Frey指出的那样,你也可以使用types.SimpleNamespace类而不是上面的空类:
import types
a = types.SimpleNamespace()
这也允许您在构造函数中添加属性:
import types
a = types.SimpleNamespace(
variable_a=1,
variable_b=2,
variable_c=3)
它还有一个很好的__repr__
函数:
print(a)
打印:
namespace(variable_a=1, variable_b=2, variable_c=3)