【问题标题】:Difference between @staticmethod and a function inside a method@staticmethod 和方法中的函数之间的区别
【发布时间】:2021-05-04 10:12:43
【问题描述】:

Circle1Circle2 的区别或优势是什么?有没有比其他方法更正确的方法?唯一的好处就是在Circle2可以继承?

class Geometry(object):
    def __init__(self, x, y):
        self.ptsx = x
        self.ptsy = y
        
        
class Circle1(Geometry):
    def __init__(self, radius):
        self.radius = radius
    def area(self):
        def circle_formula(radius):
            return 3.14*radius
        
        return circle_formula(self.radius)
    
    
class Circle2(Geometry):
    def __init__(self, radius):
        self.radius = radius
    def area(self):
        return self.circle_formula(self.radius)   
    
    @staticmethod
    def circle_formula(radius):
            return 3.14*radius

我知道正确的方法是Cicle2@staticmethod 将是一个类似area_formula 的函数,并且在继承它时重写它。但我的疑问是,如果我真的必须使用只存在于特定类中的辅助函数,那么实现它的最正确方法是什么?

【问题讨论】:

  • 嗨,欢迎来到 SO!您的问题是基于意见的,因为从技术上讲,这两种方法都很好,而您要问的是个人喜好问题。我们尽量避免在此板上提出基于意见的问题。

标签: python oop methods static-methods


【解决方案1】:

这两个类之间的主要区别在于,如果将staticmethod 添加到方法中,则无需实例化该类即可访问该方法。

我的意思是,我可以这样做:Circle2.circle_formula(2)

在Circle1中,你应该实例化类来访问计算面积的方法;

my_circle = Circle1(2)
my_circle.area()

但是,在您介绍的情况下,我将在 area 方法中添加逻辑,因为实现了 Circle1,而不使用其中的函数。像这样:

class Circle1(Geometry):
    def __init__(self, radius):
        self.radius = radius
    def area(self):        
        return 3.14*radius

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 2014-01-25
    • 2016-02-03
    相关资源
    最近更新 更多