Ошибка атрибута при определении класса Python с помощью функции свойства - PullRequest
0 голосов
/ 09 апреля 2020

Я пытался создать объект класса python следующим образом:

class mine:
    def __init__(self, ia, f,minv=1e-02, maxv=np.inf, mask=None):
        self.ia=ia
        self.f=f
        self.minv = minv
        self.maxv = maxv
        self.mask = mask

    @property
    def mask(self):
        if self._mask is None:
            self._mask = ((np.abs(self.ia) >= self.minv) &
                          (np.abs(self.ia) <= self.minv))            
        return self._mask

def main():
    parser.add_argument("imn", "--ia", dest="ia", type=float)
    parser.add_argument("-f1", "--f", dest="f", type=float, default=10.0") 
    parser.add_argument("--mask", dest="mask")

    s = mine(self, ia, f,minv, maxv, mask=mask)    

if __name__ == "__main__":
    main()

Я попытался запустить в Python -2.7 и Python -3 с тем же результатом. Я получаю сообщение об ошибке:

Traceback (most recent call last):
  File "mod.py", line xxx, in <module>
    main()
  File "mod.py", line xxx, in main
    maxv, mask=mask)
  File "mod.py", line xxx, in __init__
    self.mask = mask
AttributeError: can't set attribute

1 Ответ

0 голосов
/ 09 апреля 2020

Последняя строка в вашем __init__ конфликтует с функцией mask в вашем классе. Вам нужно использовать другой атрибут класса, другое имя метода или определить функцию @mask.setter

class mine:
    def __init__(self, ia, f,minv=1e-02, maxv=np.inf, mask=None):
        self.ia=ia
        self.f=f
        self.minv = minv
        self.maxv = maxv

        # This conflicts with the method below
        # self.mask = mask 
        self._mask = mask # assign to self._mask instead?

    @property
    def mask(self):
        if self._mask is None:
            self._mask = ((np.abs(self.ia) >= self.minv) &
                      (np.abs(self.ia) <= self.minv))

         return self._mask    

    # If you define this function, you can assign to self.mask directly
    @mask.setter
    def mask(self, value):
        self._mask = value

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...