在不同的类python中调用方法

时间:2015-12-06 02:20:52

标签: python class methods call

我执行了移动矩形中点的功能,两个点的值都返回none和none。当首选方法时,我不想返回值,是否有另一种选择。

class Point:

    def move(self, dx, dy):
        '''(Point,number,number)->None
        changes the x and y coordinates by dx and dy'''
        self.x += dx
        self.y += dy

class Rectangle:

     def move(self, dx, dy):
        '''(Rectangle, number, number) -> None
        changes the x and y coordinates by dx and dy'''
        self.bottom_left = self.bottom_left.move(dx, dy)
        self.top_right = self.top_right.move(dx, dy)

2 个答案:

答案 0 :(得分:2)

没有必要将结果分配回点; Point.move直接修改其参数,而不是返回新的Point对象。

class Rectangle:
    def move(self, dx, dy):
        self.bottom_left.move(dx, dy)
        self.top_right.move(dx, dy)

答案 1 :(得分:1)

在矩形类中,如果使用

设置角落
self.corner = point.move(dx, dy)

函数Point.move()需要返回一些东西,否则默认返回None。你可以通过返回Point.move

的self来解决这个问题
class Point(object):

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def move(self, dx, dy):
        '''(Point,number,number)->None
        changes the x and y coordinates by dx and dy'''
        self.x += dx
        self.y += dy
        return self

在不更改Rectangle代码的情况下解决了问题。你也可以这样做

class Rectangle(object):

    def __init__(self, top_right, bottom_left):
        self.top_right = Point(*top_right)
        self.bottom_left = Point(*bottom_left)

    def move(self, dx, dy):
        '''(Rectangle, number, number) -> None
        changes the x and y coordinates by dx and dy'''
        self.bottom_left.move(dx, dy)
        self.top_right.move(dx, dy)

这可能会好一点,但第一个例子解释了为什么你没有。