这是我的代码。
如何执行print_point行? 编辑工作。谢谢
class Point:
def __init__(self, x=0, y=0):
self.x = x
self.y = y
def distance_from_origin(self):
return ((self.x **2) + (self.y **2)) **.5
def print_point(p):
print '(%s, %s)' % (str(p.x), str(p.y))
这是我在运行模块后输入shell的内容:
p = Point(5,2)
p.x
5
p.y
2
p.distance_from_origin()
5.385164807134504
p.print_point(p)
Traceback (most recent call last):
File "<pyshell#196>", line 1, in <module>
p.print_point(p)
TypeError: print_point() takes exactly 1 argument (2 given)
答案 0 :(得分:2)
目前尚不清楚你想要什么,因为你的缩进是错误的。 print_point
是班级的一部分吗?
如果是这样,您self
正好distance_from_origin
,但可能不在print_point
中:
def print_point(self):
print '(%f, %f)' % (self.x, self.y)
使用self
参数的其他名称(例如p
(请注意,打印行为将为您进行str
转换......)
或者您是否希望print_point
不在课堂上,在这种情况下您应该按原样使用(p.x, p.y)
?或者,正如其他答案所建议的那样,static或class方法?
答案 1 :(得分:0)
添加self
作为第一个参数或print_point
。您还需要使用x
前缀引用y
和self
,因为这些字段属于该实例。
def print_point(self):
print '(%s, %s)' % (str(self.x), str(self.y))
答案 2 :(得分:0)
您使用self
作为函数distance_from_origin
中的参数。
但您选择p
作为函数print_point
中的参数。
实际上,它适用于p
:
>>> p = Point(5,2)
>>> p.print_point()
(5, 2)
但是有一个约定使用self
将类的实例传递给方法。否则一切都变得非常麻烦。
此外,%s
使用str
方法将对象转换为字符串。因此,无需手动转换为字符串。
考虑到所有因素,函数print_point
将如下所示:
def print_point(self):
print '(%s, %s)' % (self.x, self.y)
点坐标由数字表示,因此您可能希望使用特殊方法进行数字输出。
字符串有一个新的format
方法。绝对是exists in Python 2.7。只需查看示例并为您的案例选择最满意的输出格式。例如,您可以这样做:
def print_point(self):
print('({self.x}, {self.y})'.format(self=self))