首页 > 解决方案 > 如何定义 toString 方法?

问题描述

我刚刚完成了我的任务,现在我唯一剩下的就是定义这里显示的 tostring 方法。

import math

class RegularPolygon:
  def __init__(self, n = 1, l = 1):
    self.__n = n
    self.__l = l

  def set_n(self, n):
    self.__n = n

  def get_n(self):
    return self.__n

  def addSides(self, x):
    self.__n = self.__n + x

  def setLength(self, l ):
    self.__l = l

  def getLength(self):
    return self.__l 

  def setPerimeter(self):
    return (self.__n * self.__l )

  def getArea(self):
    return (self.__l ** 2 / 4 * math.tan(math.radians(180/self.__n)))

  def toString(self):
    return
x = 3
demo_object = RegularPolygon (3, 1)
print(demo_object.get_n() , demo_object.getLength())
demo_object.addSides(x)
print(demo_object.get_n(), demo_object.getLength())
print(demo_object.getArea())
print(demo_object.setPerimeter())

基本上,它所做的 tostring 是返回一个字符串,其中包含内部变量的值。我也需要有关 getArea 部分的帮助。作业说明

1

2

标签: python

解决方案


作业说

... 打印 RegularPolygon 对象的字符串表示。

所以我希望你能选择一个合适的“代表”。你可以这样做:

return f'{self.__n+2} sided regular polygon of side length {self.__l}'

或如@Roy Cohen 所建议

return f'{self.__class__.__name__}({self.__n}, {self.__l})'

然而,正如@Klaus D. 在评论中所写,Python不是Java,因此有自己的标准和神奇的方法可供使用。

我建议阅读此答案,以了解两个内置字符串表示魔术方法之间的差异:__repr____str__. print()通过实现这些方法,它们将在使用或类似的东西时自动被调用,而不是你.toString()每次都调用。


现在来解决 getter 和 setter。通常在 Python 中你会避免这些,而是​​更喜欢使用属性。有关更多信息,请参阅此答案,但总结一下,您要么直接使用对象属性,要么使用@property装饰器将方法转换为属性。

编辑

您的面积公式可能是操作顺序错误。确保您明确说明您首先执行的操作:

return self.__l ** 2 / (4 * math.tan(math.radians(180/self.__n)) )

这可能是正确的:)


推荐阅读