变量支持类,如属性赋值

时间:2018-05-03 11:19:50

标签: python

我想知道是否有某种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)

1 个答案:

答案 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)