簡體   English   中英

在實例變量之外使用Class方法/屬性

[英]Using a Class method/property outside of an instance variable

我的課如下:

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)起作用?

謝謝

如果您的目標是使vol(x,y)起作用,則可以定義vol以使用傳遞給它的參數創建一個新對象,調用該屬性,然后返回。

或者您可以在橢球體類上創建一個名為Vol的函數,並使該函數靜態化。 然后,您可以讓該函數的實例版本僅調用靜態版本。

我會遵循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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM