2011-12-11 163 views
0

这是我的代码。如何调用Python中的对象内的函数/方法

如何执行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)) 

这是我跑模块后键入入壳:

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

你在'distance_from_origin'中获得了'self',但没有'print_point'。 (另外,检查你的缩进:'def's应该缩进。) –

回答

0

添加self作为第一个参数或print_point。您还需要使用self前缀参考xy,因为这些字段属于该实例。

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

谢谢你这个也工作 – SwimBikeRun

+0

'str(p,self.x)'是什么意思?实际上,他的代码“p”扮演了“自我”的角色。 – ovgolovin

2

不清楚你想要什么,因为你的缩进是错误的。是print_point班的一部分吗?

如果是这样,你就在distance_from_originself,但也许不print_point

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

它是合法的,但一个坏主意,使用不同的名称为self参数,如您p

(请注意,打印的行动本身会做str转换为你...)

还是你想print_point被淘汰之类的,在这种情况下,你应该有它不过是与(p.x, p.y)?或者,如其他答案所示,staticclass方法?

+0

是的,这是我想要的。谢谢。我还输入了逗号,而不是让它变得更难的句号。 p,y而不是p.y. – SwimBikeRun

+0

实际上,在原始代码中'p'扮演了'self'的角色。 – ovgolovin

0

您在功能distance_from_origin中使用了self作为参数。

但是您选择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)) 
相关问题