如何改变Python继承中的半径

问题描述 投票:0回答:1

我想得到圆的半径和圆的其他面积。我得到了正确的新区域,但没有得到正确的半径。半径是一样的。为什么?我该如何解决这个问题?

import math


class Figure:
    def __init__(self, area):
        self.__area = area

    def set_area(self, area):
        self.__area = area

    def get_area(self):
        return self.__area


class Circle(Figure):
    def __init__(self, area):
        super().__init__(area)
        self.__radius = math.sqrt(self.get_area() / math.pi)

    def get_radius(self):
        return self.__radius


c = Circle(25)
print(c.get_area())
print(c.get_radius())  
c.set_area(100)
print(c.get_area())
print(c.get_radius())  # Here i get the same radius. Why? How can I solve this problem? 
python class inheritance
1个回答
0
投票

您将

__radius
成员保存在
Circle
的构造函数中。当您设置不同的区域时,不会重新计算。

一种方法是不保存它,并按需计算:

class Circle(Figure):
    def get_radius(self):
        return math.sqrt(self.get_area() / math.pi)

或者,如果您获取半径的频率比更改区域的频率高得多,并且您希望缓存它以提高性能,则可以在设置区域时重新计算它:

class Figure:
    def __init__(self, area):
        self.set_area(area)

    def set_area(self, area):
        self.__area = area

    def get_area(self):
        return self.__area


class Circle(Figure):
    def set_area(self, area):
        super().set_area(area)
        self.__radius = math.sqrt(self.get_area() / math.pi)

    def get_radius(self):
        return self.__radius
© www.soinside.com 2019 - 2024. All rights reserved.