自动将 class 中的所有变量转换为 "self" 变量

Automatically transform all variables in a class to "self" variables

我的代码(最小示例)如下所示:

class Hello:
    a=1
    b=2
    c=3
    def __init__(self):
        self.d= 4

并且我正在搜索一个像 set_all_vars_to_self_vars() 这样的函数,我可以在 class Hello 中调用它,这样 Hello class 就变得等价了至:

class Hello:
    def __init__(self):
        self.d = 4
        self.a = 1
        self.b = 2
        self.c = 3

是否有一些功能可以做到这一点?

丰富的示例如下所示:

from manim import *

class Scene1(Scene):
    def construct(self):
        dot = Dot()
        circ= Circle()
        self.add(dot,circ)
        self.set_variables_as_attrs(dot)  # at the moment, variables have to be added manually
        return self

class Scene2(Scene):
    def construct(self):
        sc1 = Scene1.construct(self)
        dot2= Dot().next_to(sc1.dot)
        self.play(ShowCreation(dot2))

您在 __init__ 外定义的变量 与您在 __init__ 内声明的变量根本无法比较。第一个属于Class,第二个属于Object.

因此,如果您希望 abcdHello() 的每个实例而变化,则不应声明它们__init__() 范围之外。它们根本没有相同的含义。

但是,如果这是您想要做的,请按以下步骤操作:

class Hello:
    a = 4
    b = 4
    c = 4

    def __init__(self):
        d = 4
        for attr in dir(self):
            if not callable(attr) and not attr.startwith('__'):
                self.__dict__.setdefault(attr, Hello.__dict__.get(attr))

然后,使用 H = Hello(),您将得到,例如,H.a = Hello.a。 更一般地说,对于 Class.

的每个 Instance,您将拥有 Class 的每个变量的副本

这是你想要的吗?