Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 支持类属性赋值的变量_Python - Fatal编程技术网

Python 支持类属性赋值的变量

Python 支持类属性赋值的变量,python,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_属性函数来支持它,但我想知道是否有对此的内置支持 动机: 我想调试一

我想知道是否有某种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_属性函数来支持它,但我想知道是否有对此的内置支持

动机:

我想调试一个类中的某个函数,该类需要很多操作/变量来初始化,因此我想创建一个子类实例,该实例具有与该特定函数对应的变量,并将其作为该特定函数的self发送

例如:

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)

最简单的方法是创建一个内部没有任何内容的类:

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
namespace(variable_a=1, variable_b=2, variable_c=3)
正如@James在评论中所说:


类对象的实例可以动态地为其指定属性。还有一些方法可以限制属性分配,但默认情况下,您可以只分配任何内容

正如@Aran Frey指出的,您也可以使用类而不是上面的空类:

import types
a = types.SimpleNamespace()
这还允许您在构造函数中添加属性:

import types

a = types.SimpleNamespace(
    variable_a=1,
    variable_b=2,
    variable_c=3)
此外,它还有一个很好的_报告____ _ _ _ _ _ ;功能:

print(a)
印刷品:

1, 2, 3
namespace(variable_a=1, variable_b=2, variable_c=3)

最简单的方法是创建一个内部没有任何内容的类:

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
namespace(variable_a=1, variable_b=2, variable_c=3)
正如@James在评论中所说:


类对象的实例可以动态地为其指定属性。还有一些方法可以限制属性分配,但默认情况下,您可以只分配任何内容

正如@Aran Frey指出的,您也可以使用类而不是上面的空类:

import types
a = types.SimpleNamespace()
这还允许您在构造函数中添加属性:

import types

a = types.SimpleNamespace(
    variable_a=1,
    variable_b=2,
    variable_c=3)
此外,它还有一个很好的_报告____ _ _ _ _ _ ;功能:

print(a)
印刷品:

1, 2, 3
namespace(variable_a=1, variable_b=2, variable_c=3)

看起来这正是我所需要的,你能扩展一下你在那里做了什么吗?类对象的实例可以动态地为它们分配属性。也有一些方法可以限制属性分配,但默认情况下,您可以只分配属性,以防您不想自己滚动。它提供了一些优点,比如构造器中的关键字参数:a=SimpleNamespacea=1,b=2和一个很好的repr。@Rohi这与在类的_init__;方法中如何将属性附加到实例没有什么不同,只是在方法中通常通过self引用实例,但实际上是一样的。self不是一种神奇的语法,它只是一个按惯例使用的名称。@Rohi如果你不想创建一个类,我在回答中编辑了另一个选项似乎这正是我所需要的,你能扩展一下你所做的吗?类对象的实例可以动态地为它们分配属性。也有一些方法可以限制属性分配,但默认情况下,您可以只分配属性,以防您不想自己滚动。它提供了一些优点,比如构造器中的关键字参数:a=SimpleNamespacea=1,b=2和一个很好的repr。@Rohi这与在类的_init__;方法中如何将属性附加到实例没有什么不同,只是在方法中通常通过self引用实例,但实际上是一样的。self不是一种神奇的语法,它只是一个按惯例使用的名称。@Rohi如果你不想创建一个类,我在答案中编辑了另一个选项。如果你的类有这么多未使用的属性,这可能是你的类层次结构不正确的标志。也许考虑把它分解成多个更小的类?“阿兰·费伊,他只是说这个函数没有用。”实际上,最小函数只使用一个变量来分解一个更大的函数。我的类在层次结构方面非常好。如果你的类有这么多未使用的属性,这可能是你的类层次结构不正确的一个标志。也许考虑把它分解成多个更小的类?“阿兰·费伊,他只是说这个函数没有用。”实际上,最小函数只使用一个变量来分解一个更大的函数。我的班级在层次结构上很好。