我们可以使用类中方法的输出作为该类的属性吗

时间:2019-07-10 09:34:46

标签: python class object

我正在尝试将变量作为类的属性,但与此同时,必须在此类的方法中计算该变量。这是我的代码:

class entrepot :
       def __init__(self,L_R,L_A,pos_porte,longueur,largeur):
          self.L_R=L_R
          self.L_A=L_A
          self.pos_porte=pos_porte
          self.longueur=longueur
          self.largeur=largeur

       def matrice_expedition(self):
          A=np.zeros((longueur,largeur-2))
          return (A)
我可以添加A作为属性吗?这听起来像个愚蠢的问题,但我仍然是初学者

1 个答案:

答案 0 :(得分:1)

您的意思是这样的吗?

# py2 / py3 compat: inherit from object for py2
# pep08 : class names should be CamelCase

class Entrepot(object):
   def __init__(self,L_R,L_A,pos_porte,longueur,largeur):
      self.L_R=L_R
      self.L_A=L_A
      self.pos_porte=pos_porte
      self.longueur=longueur
      self.largeur=largeur
      self.A = self.matrice_expedition()

   def matrice_expedition(self):
      # Python has no implict `this`, you need to
      # use `self.XXX` to access the current instance
      # attributes
      A = np.zeros((self.longueur,self.largeur-2))
      return A

请注意,尽管从技术上讲是合法的,但是这段代码不能确保self.Aself.longeurself.largeur保持一致,因此,如果这些属性中的任何一个后来发生更改,您可能会遇到一些问题。 / p>

如果初始化后不应更改仓库(入口)的大小,则可以通过将longueurlargeur重命名为_longueur和{{1}来设置_largeurlongueur“受保护”属性}(请注意,这只是一个命名约定-不会阻止对这些属性的访问-但这是一个非常强的约定,它告诉您的类的用户,他们不应弄乱这些属性,并且如果这样做的话,则只能靠它们自己来破坏任何东西。)

此外,如果您仍想提供对largeurclass Entrepot(object): def __init__(self, L_R, L_A, pos_porte, longueur, largeur): self.L_R = L_R self.L_A = L_A self.pos_porte = pos_porte self._longueur=longueur self._largeur=largeur self.A = self.matrice_expedition() @property def longueur(self): return self._longueur @property def largeur(self): return self._largeur def matrice_expedition(self): # .... 的公共读取访问权限,则可以将它们设置为只读属性:

<ng-container *ngFor="let day of days">
<tr 
[ngStyle]="{'background-color': day.mydate.getDay() == 0 ? 'green' : 'white' }">
<td>{{day.id}}</td>
<td>{{day.mydate  | date:'yyyy-MM-dd' }}</td>
<td>{{day.mydate | date:'EEEE' }}</td>
</tr>
</ng-container>

实际上,您应该只将应该由客户端代码使用的属性和方法公开为“公共”属性(和方法)(可能您也希望将“ self.A”也设置为受保护的属性)< / p>