1

这是一个基本问题。我写了以下代码:

class Point:
    def __init__(self,x=0,y=0):
        self.x=x
        self.y=y
    def __str__(self):
        return '({0} , {1})'.format(self.x,self.y)
    def reflect_x(self):
        return Point(self.x,-self.y)
    
p1=Point(3,4)
p2=p1.reflect_x

print(str(p1),str(p2))
print(type(p1),type(p2))

这里 type ofp1和 type ofp2是不同的。我只想p2作为一个点,它是p1从 x 轴的反射点。我该怎么做?

4

3 回答 3

6

我只想要 p2 作为一个点,它是 p1 从 x 轴的反射点。我该怎么做?

那么,你应该调用reflect_xon方法p1并将结果存储在 中p2,如下所示:

p2 = p1.reflect_x()

在您的示例代码中,您做了一些不同的事情:

p2 = p1.reflect_x

这意味着您要p2包含p1'reflect_x方法。

于 2013-07-04T01:21:04.553 回答
3

供参考:

如果您想reflect_x作为成员而不是作为方法访问。将@property装饰器添加到reflex_x方法中。

喜欢:

class Point:
    def __init__(self,x=0,y=0):
        self.x=x
        self.y=y

    def __str__(self):
        return '({0} , {1})'.format(self.x,self.y)

    @property
    def reflect_x(self):
        return Point(self.x,-self.y)
于 2013-07-04T01:44:45.807 回答
2

在python中,每一个名字都是引用,每件事都是对象,甚至是函数或方法。您只需使用 name p1.reflect_x,这只是一个 instancemethod 对象的引用,它绑定到 instance p1。因此,当您使用 时p2 = p1.reflect_x,您只需为 分配一个引用p2,而永远不要调用该方法。

据此,该声明return Point(self.x, -self.y)实际上从未运行过。如果要运行它,只需使用以下方法调用该方法:p2 = p1.reflect_x()

于 2013-07-04T09:05:27.943 回答