使用类方法/属性在实例变量之外

2024-09-29 22:37:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我上的课如下:

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

在后面的一段代码中,我使用了一个volume函数,如下所示:

^{pr2}$

vol函数与我在类中定义的@property完全相同。为了让这段代码正常工作,我不得不复制并粘贴class@property,并将其转换为一个常规函数,如下所示:

def vol(a,b):
    return (4*np.pi/3) * a * a * b

我总是被告知,复制和粘贴代码是我做错了什么的标志。所以我的问题是,有没有一种方法可以重新设计我的类,这样我就可以调用在那个球体类中定义的volume@property/method,而不用创建实例,这样Z=vol(X,Y)就可以工作了?在

谢谢


Tags: 函数代码selfreturndefnppiproperty
2条回答

如果您的目标是使vol(x,y)正常工作,那么可以定义vol来创建一个新对象,使用传递给它的参数,调用该属性,然后返回。在

或者你可以在你的spheroid类上创建一个名为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)

相关问题 更多 >

    热门问题