Python 类与静态方法 定义一个类方法getcirclecount inside circle,该方法返回创建的圆对象数。提示:使用classmethoddecorator 尝试使用对象和类访问类方法 要测试创建的圆数和每个圆的面积,请在输入中提供每个圆的半径 输出圆的总数

Python 类与静态方法 定义一个类方法getcirclecount inside circle,该方法返回创建的圆对象数。提示:使用classmethoddecorator 尝试使用对象和类访问类方法 要测试创建的圆数和每个圆的面积,请在输入中提供每个圆的半径 输出圆的总数,python,python-3.x,list,append,class-method,Python,Python 3.x,List,Append,Class Method,这是我试过的 import os import sys #Add circle class implementation here class Circle: pi = 3.14 count = 0 def __init__(self,radius): self.radius = radius @classmethod def getCircleCount(self): Circle.count += 1

这是我试过的

import os
import sys

#Add circle class implementation here
class Circle:
    pi = 3.14
    count = 0
    def __init__(self,radius):
        self.radius = radius
    
    @classmethod
    def getCircleCount(self):
        Circle.count += 1
        return Circle.count
  
    
    def area(self):
        area = self.radius **2 * Circle.pi
        return area

    if __name__ == "__main__":
        with open(os.environ['OUTPUT_PATH'], 'w') as fout:
            res_lst = list()
            circcount = list()
            lst = list(map(lambda x: float(x.strip()), input().split(',')))
            for radi in lst:
            c=Circle(radi)
                res_lst.append(str(c.getCircleCount())+" : "+str(c.area()))
             fout.write("{}\n{}".format(str(res_lst), str(Circle.getCircleCount())))
对于输入
1,2

预期产量为

['1 : 3.04', '2 : 12.56']

2
我得到的输出:

['1 : 3.04', '2 : 12.56']

3

这里没有给出2个输入,但最后一行的输出是3,使用计数而不是增加

Circle.count
而不是
Circle.getCircleCount()

编辑:如果无法编辑main

选项1:初始化时注册新函数 选项2:使用arg*
或者,您也可以像这样编写decorator。我确实喜欢第一个,因为它很简单。

您不应该在类方法
getCircleCount
中将循环计数增加到构造函数中。只有创建新的圆时,圆计数才会增加。现在,如果您调用
getCircleCount
100次。循环计数将增加100。除了将增量移动到构造函数,还需要向析构函数_del___;()@luthervespers oh添加减量。我无法编辑主函数。我更新了新版本。这只是一个快速的解决方案。
class Circle:
    pi = 3.14
    count = 0
    def __init__(self,radius):
        self.radius = radius
        self.getCircleCount = self._foo
    
    def _foo(self):
        Circle.count += 1
        return Circle.count

    @classmethod
    def getCircleCount(cls):
        return cls.count

    # ....
class Circle:
    # ...

    def getCircleCount2(*args):
        if len(args) == 0:
            return Circle.count
        else:
            Circle.count += 1
            return Circle.count