我想得到圆的半径和圆的其他面积。我得到了正确的新区域,但没有得到正确的半径。半径是一样的。为什么?我该如何解决这个问题?
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?
您将
__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