python - 如何定义 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 部分的帮助。作业说明
解决方案
作业说
... 打印 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)) )
这可能是正确的:)
推荐阅读
- php - 我收到错误,导致我的两个数据库表为空
- java - 无法在 Windows 10 上安装 Java 6
- java - Gradle 6.8.1 不使用 Junit 执行测试
- substrate - 安装基板验证器集时出错
- kotlin - 预初始化列表/集合/等的大小
- javascript - Gatsby:“警告有多个模块的名称只是大小写不同。这可能导致意外行为......”
- sql - TSQL Cross Apply 确定要查询的数据库
- mongoose - 代理背后的猫鼬。如何通过代理连接到 mongoDB
- python - 为什么我不能用 fernet [Python] 解密数据库值?
- sharepoint - 如何重置 SharePoint 内容数据库中的缓存?