gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:36:35 25 4
gpt4 key购买 nike

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

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 作为属性吗?这听起来是个愚蠢的问题,但我还是个初学者

最佳答案

你的意思是这样的吗?

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

如果仓库 (entrepot) 大小在初始化后不应更改,您可以将 longueurlargeur 重命名为 _longueur,使其成为“ protected ”属性_largeur (请注意,这只是一个命名约定 - 它不会阻止对这些属性的访问 - 但它是一个非常强大的约定,告诉您的类的用户他们不应该搞乱具有这些属性,并且如果它们做了任何事情并破坏了任何东西,则它们是独立的)。

此外,如果您仍然想提供对 longueurlargeur 的公共(public)读取访问权限,您可以将它们设置为只读属性:

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”设置为 protected 属性)

关于python - 我们可以使用类中方法的输出作为该类的属性吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56967743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com