自动将 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
.
因此,如果您希望 a
、b
、c
和 d
随 Hello()
的每个实例而变化,则不应声明它们__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
的每个变量的副本
这是你想要的吗?
我的代码(最小示例)如下所示:
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
.
因此,如果您希望 a
、b
、c
和 d
随 Hello()
的每个实例而变化,则不应声明它们__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
的每个变量的副本
这是你想要的吗?