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

2024-09-22 16:31:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将一个变量作为一个类中的属性,但同时这个变量必须在这个类中的一个方法中计算。这是我的密码:

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)

允许我添加as属性吗?这听起来是个愚蠢的问题,但我还是个初学者


Tags: 方法posself密码属性initdefnp
1条回答
网友
1楼 · 发布于 2024-09-22 16:31:18

你是说这样的事吗

# 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保持一致,因此如果这些属性中的任何一个稍后更改,您可能会遇到一些问题

如果初始化后仓库(转口)大小不应更改,您可以将longueurlargeur属性重命名为_longueur_largeur(请注意,这只是一个命名约定-它不会阻止对这些属性的访问-但它是一个非常强大的约定,它告诉您的类的用户,他们不应该弄乱这些属性,如果他们弄乱并破坏了这些属性,他们就可以自己处理任何东西)

另外,如果您仍然希望提供对longueurlargeur的公共读取访问,则可以将它们设置为只读属性:

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()

   @property
   def longueur(self):
       return self._longueur

   @property
   def largeur(self):
       return self._largeur

   def matrice_expedition(self):
      # ....

实际上,您应该只将客户机代码应该使用的属性和方法作为“public”属性(和方法)公开(很可能您也希望使“self.A”成为受保护的属性)

相关问题 更多 >