1

私は次のようなクラスを持っています:

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)が機能するようにする方法はありますか?

ありがとう

4

2 に答える 2

0

vol(x、y)を機能させることが目標の場合は、volを定義して、渡されたパラメーターを使用して新しいオブジェクトを作成し、そのプロパティを呼び出してから戻ることができます。

または、Volという回転楕円体クラスで関数を作成し、その関数を静的にすることもできます。次に、その関数のインスタンスバージョンで静的バージョンを呼び出すだけで済みます。

于 2013-03-20T22:23:06.020 に答える
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)
于 2013-03-20T22:32:48.573 に答える