python - Python中的格式问题
问题描述
我正在尝试在 Python 中创建一个简单的 Point 类,它将能够在另一个点对象或只是另一组参数传递坐标之间进行一些简单的三角计算。
我面临的问题是,当我将另一个Point
对象作为参数传递给distance_from_point
方法时,Python 在从继承的函数getx()
和gety()
.
我尝试将传递的参数转换为 Point 对象,但它似乎没有保留从任一 get 方法返回的整数值。
这是我的课:
import math
class Point:
def __init__(self, x=0.0, y=0.0):
self._x = x
self._y = y
def getx(self):
return self._x
def gety(self):
return self._y
def distance_from_xy(self, x, y):
return math.sqrt(self.getx()*x + self.gety()*y)
def distance_from_point(self, point):
myPoint = Point(point)
return math.sqrt(self.getx()* myPoint.getx() + self.gety()*myPoint.gety())
point1 = Point(0, 0)
point2 = Point(1, 1)
print(point1.distance_from_point(point2))
print(point2.distance_from_xy(2, 0))
我收到的错误信息是:
Traceback (most recent call last):
File "main.py", line 24, in <module>
print(point1.distance_from_point(point2))
File "main.py", line 19, in distance_from_point
return math.sqrt(self.getx()* myPoint.getx() + self.gety()*myPoint.gety())
TypeError: unsupported operand type(s) for *: 'int' and 'Point'
如果 myPoint 从 Point 类继承,它不应该看到 get 方法,它也应该从另一个 Point 对象返回整数值吗?我是否正确/在正确的轨道上理解这一点?
解决方案
您将点的类实例传递给您的方法。
print(point1.distance_from_point(point2))
所以现在在你的类方法中
def distance_from_point(self, point):
myPoint = Point(point)
return math.sqrt(self.getx()* myPoint.getx() + self.gety()*myPoint.gety())
这里的局部变量是Point的一个实例。然后你传递那个变量来创建一个新的 Point 对象(不需要这个)。然后,您将点实例传递给点对象。所以新的 myPoint 对象上的 x 现在被设置为 point 的实例而不是 int。只需完全删除该行并引用作为 Point 实例的局部变量点。
def distance_from_point(self, point):
return math.sqrt(self.getx() * point.getx() + self.gety() * point.gety())
推荐阅读
- google-bigquery - 创建在不同列上分区的新 Bigquery 表
- swift - 从 Swift 中的时间字符串获取小时值
- node.js - nodejs - TypeError [ERR_INVALID_ARG_TYPE]:第一个参数必须是字符串类型之一,缓冲区 - 当使用带有 http.request 的回调响应时
- python - Python scips 执行函数(CS50x 实验室 6:世界杯)
- visual-studio - MSBuild 还原给出“请求被中止:无法创建 SSL/TLS 安全通道。”
- http-status-code-404 - GitHub 错误 404 此处没有 GitHub Pages 站点
- ruby - 如何实现此方法链接
- android - 如何在 Android 中创建同时支持 Light 和 Dark 主题的自定义通知图标
- flutter - 地理编码器颤振不像地理编码api那样免费
- flutter - 如何为某些类执行“flutter pub run build_runner build”