如何在python中调用对象内部的函数/方法

如何在python中调用对象内部的函数/方法,python,Python,这是我的密码 如何执行打印点行编辑以工作。谢谢 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)' % (st

这是我的密码

如何执行打印点行编辑以工作。谢谢

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)
p=点(5,2)
p、 x
5.
p、 y
2.
p、 距离原点()
5.385164807134504
p、 打印点(p)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
p、 打印点(p)
TypeError:print_point()正好接受1个参数(给定2个)

添加
self
作为第一个参数或
打印点
。您还需要使用
self
前缀引用
x
y
,因为这些字段属于实例

def print_point(self):
     print '(%s, %s)' % (str(self.x), str(self.y))

不清楚你想要什么,因为你的缩进搞错了。
print\u point
是课程的一部分吗

如果是这样的话,您的
self
位于距原点的
距离处,但可能不在
打印点处

def print_point(self):
    print '(%f, %f)' % (self.x, self.y)
self
参数使用不同的名称,例如您的
p
,这是合法的,但不是一个好主意

(请注意,打印操作将为您进行
str
转换…)


或者您希望
print\u point
不在课堂上,在这种情况下,您应该按原样使用
(p.x,p.y)
?或者,正如其他答案所建议的,您使用了
self
作为函数
distance\u from\u origin
中的参数

但是您选择了
p
作为函数
print\u point
中的参数

实际上,它与
p
一起工作:

>>> p = Point(5,2)
>>> p.print_point()
(5, 2)
但是有一种约定,使用
self
将类的实例传递给方法。否则一切都会变得很麻烦

另外,
%s
使用
str
方法将对象转换为字符串。因此,不需要手动将转换为字符串

考虑到这一切,函数
print\u point
将如下所示:

def print_point(self):
    print '(%s, %s)' % (self.x, self.y)
点坐标由数字表示,所以您可能希望对数字输出使用特殊方法

字符串有一个新的
格式
方法。这是肯定的。只需查看示例,并为您的案例选择最令人满意的输出格式。例如,您可以执行以下操作:

def print_point(self):
    print('({self.x}, {self.y})'.format(self=self))

您的
self
位于距离原点
右侧,但不是
打印点
。(另外,检查缩进:def的缩进应该是缩进的。)是的,这就是我想要的。谢谢我还键入逗号而不是句号,这使它更难。p、 实际上,在原始代码中,p
self
扮演了
self
的角色。
str(p,self.x)
是什么意思?实际上,在他的《代码》中,p
扮演了自己的角色。