【问题标题】:How to return the same class object in Python如何在 Python 中返回相同的类对象
【发布时间】:2013-07-04 01:15:40
【问题描述】:

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

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))

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

【问题讨论】:

  • 请将您的代码封装在代码块中。
  • 请不要只描述结果,而是要展示出来。在这种情况下,您的错误非常明显,以至于 Celada 在不到一分钟的时间内就发现了它,但通常仅仅看一眼代码就不会出现这种情况。这就是为什么查看结果(p2 是“绑定方法”而不是“实例”)对于尝试诊断您的问题的人很有用。

标签: python class methods


【解决方案1】:

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

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

p2 = p1.reflect_x()

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

p2 = p1.reflect_x

这意味着您希望p2 包含p1 的reflect_x 方法。

【讨论】:

  • 非常感谢!我真的被困在里面了!现在我找到了解决方案。
【解决方案2】:

仅供参考:

如果您想以成员而不是方法访问​​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)

【讨论】:

    【解决方案3】:

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

    据此,return Point(self.x, -self.y) 语句实际上从未运行过。如果你想运行它,只需调用这个方法:p2 = p1.reflect_x()。

    【讨论】:

    • 感谢您的精彩解释!
    猜你喜欢
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 2013-05-20
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多