Class 在函数内部赋值的实例变量
Class instance variable assigned inside function
可以将 class 实例变量设置为等于在函数内部创建的另一个 class 的 class 实例变量吗?在调用 func()
之后,下面的代码似乎可以工作 (a.var = [5, []]
),但我想确保我没有遗漏任何东西:
def func():
class C:
def __init__(self):
self.var = [[] for _ in np.arange(2)]
c = C()
c.var[0] = 5
a.var = c.var
class A:
def __init__(self):
self.id = 0
self.var = [[] for _ in np.arange(2)]
if __name__ == "__main__":
a = A()
func()
是的,您只是在分配对象。现在,你应该非常小心你写这个的方式。依赖你设定的范围是个坏主意——它会起作用,但我很容易看到有人忘记了“a”,它永远不会传递给 func()。我认为更好的 func 实现:
def func(a, val=5):
class C:
def __init__(self):
self.var = [[] for _ in range(2)]
c = C()
c.var[0] = val
a.var = c.var
class A:
def __init__(self):
self.id = 0
self.var = [[] for _ in range(2)]
if __name__ == "__main__":
a = A()
func(a)
aa = A()
func(aa, val=10)
由于列表可以包含任何对象,因此您可以做一些更奇怪的事情,例如。
aa.var[1] = a
可以将 class 实例变量设置为等于在函数内部创建的另一个 class 的 class 实例变量吗?在调用 func()
之后,下面的代码似乎可以工作 (a.var = [5, []]
),但我想确保我没有遗漏任何东西:
def func():
class C:
def __init__(self):
self.var = [[] for _ in np.arange(2)]
c = C()
c.var[0] = 5
a.var = c.var
class A:
def __init__(self):
self.id = 0
self.var = [[] for _ in np.arange(2)]
if __name__ == "__main__":
a = A()
func()
是的,您只是在分配对象。现在,你应该非常小心你写这个的方式。依赖你设定的范围是个坏主意——它会起作用,但我很容易看到有人忘记了“a”,它永远不会传递给 func()。我认为更好的 func 实现:
def func(a, val=5):
class C:
def __init__(self):
self.var = [[] for _ in range(2)]
c = C()
c.var[0] = val
a.var = c.var
class A:
def __init__(self):
self.id = 0
self.var = [[] for _ in range(2)]
if __name__ == "__main__":
a = A()
func(a)
aa = A()
func(aa, val=10)
由于列表可以包含任何对象,因此您可以做一些更奇怪的事情,例如。
aa.var[1] = a