我有一個類,如下所示:使用類方法/屬性的實例變量的外
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