如何弥补丢失的引用来声明字段(numpy)?

2024-02-29

假设我有一个包含很多字段的类,并且我想使初始化程序适用于所有字段,这样我就不需要为每个字段编写初始化程序。

class Foo():
    def __init__(n):
        self.n = n
        self.x = None
        self.m = None
        self.v = None

但方法

def init_x(self, x):
    # initialize or erase x to zeros
    x = np.zeros(self.n)

不起作用,因为x=失去参考x. But

@staticmethod
def get_x(x, i):
    return x[i]

@staticmethod
def set_x(x, i):
    x[i] = val

作品。什么可能使我的init_x上班?我想最初将字段设置为“无”,因为还有其他一些因素取决于这些字段是否为“无”。


回复其中一条评论,下面不起作用

from numpy import zeros

class Foo:
  def __init__(self):
    self.x = None

  @staticmethod
  def foo(x):
    x[:] = zeros((10,4))

  def make(self):
    self.foo(self.x)


f = Foo()
f.make()
print(f.x)

since

Traceback (most recent call last):
  File "python", line 16, in <module>
  File "python", line 12, in make
  File "python", line 9, in foo
TypeError: 'NoneType' object does not support item assignment

我能想到的唯一方法是遍历变量找出它是哪个变量,然后使用self。像这样的事情:

class Foo():
    def __init__(self,n):
        self.n = n
        self.x = None
        self.m = None
        self.v = None

    def init_x(self, x):
    # initialize or erase x to zeros
        names=self.__dict__.keys()
        varname=[name for name in names if getattr(self,name)==x]
        setattr(self,varname[0],np.zeros(self.n))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何弥补丢失的引用来声明字段(numpy)? 的相关文章

随机推荐