我有一个类,如下所示:使用类方法/属性的实例变量的外
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类中定义的volume @property/method,以便Z = vol(X,Y)可以工作?
感谢
否 - 该功能将参数和方法作用于类属性。所以你最好保留'vol'函数,并将'volume'属性重新定义为'return vol(self.shortax,self.longax)'。然后,音量表达式在'vol'函数中只定义一次(更容易维护)。 – isedev 2013-03-20 22:21:06
@isedev我有同样的想法,但你继续并提交它;) – jamylak 2013-03-20 22:21:53