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