我有一个课程如下:
class Spheroid(object):
def __init__(self,shortt,longg):
self.shortax = shortt
self.longax = longg
self.alpha=self.longax/self.shortax
@property
def volume(self):
return (4*np.pi/3) * self.shortax * self.shortax * self.longax
稍后在一段代码中,我使用如下的音量函数:
x=np.arange(5,8.5,dx)
y=np.arange(5,30,dy)
X,Y = np.meshgrid(x,y)
Z = vol(X,Y)
vol函数与我在班级中定义的@property完全相同。为了使这段代码有效,我必须复制并粘贴类@property并将其转换为常规函数,如下所示:
def vol(a,b):
return (4*np.pi/3) * a * a * b
我总是被告知复制和粘贴代码表明我做错了。所以我的问题是,有没有一种方法可以重新设计我的类,以便我可以在不创建实例的情况下调用我在Spheroid类中定义的卷@property /方法,这样Z = vol(X,Y)就可以了?
由于
答案 0 :(得分:0)
如果您的目标是使vol(x,y)工作,您可以定义vol以创建一个新对象,并将参数传递给它,调用该属性,然后返回。
或者你可以在你的spheroid类上创建一个名为Vol的函数,并使该函数保持静态。然后你可以让该函数的实例版本只调用静态版本。
答案 1 :(得分:0)
我会跟随scott_fakename建议并使用这样的静态方法:
class Spheroid(object):
def __init__(self, shortt, longg):
self.shortax = shortt
self.longax = longg
self.alpha = self.longax / self.shortax
@property
def vol(self):
return Spheroid.volume(self.shortax, self.longax)
@staticmethod
def volume(shortax, longax):
return (4 * np.pi / 3) * shortax * shortax * longax
# outside the instance call it like this
Spheroid.volume(X, Y)