繁体   English   中英

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

[英]How to call functions/methods inside objects in 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))

以下是我在运行模块后输入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)

目前尚不清楚你想要什么,因为你的缩进是错误的。 print_pointprint_point一部分吗?

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

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

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

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

或者你是否希望print_point不在课堂上,在这种情况下你应该按原样使用(px, py) 或者,正如其他答案所建议的那样, 静态方法?

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

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

您在函数distance_from_origin使用self作为参数。

但是您在函数print_point选择了p作为参数。

实际上,它适用于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方法。 它绝对存在于Python 2.7中 只需查看示例并为您的案例选择最满意的输出格式。 例如,你可以这样做:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM