python重构(类中的类似方法)

时间:2010-06-30 19:42:18

标签: python refactoring

Python重构

add sub 都非常相似。如何像这样重新编码代码?逻辑基本上是相反的。

class point(object):

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

      def add( self, p ):
          x = self.x + p.x
          y = self.y + p.y
          return point( x, y )

      def sub( self, p ):
          x = self.x - p.x
          y = self.y - p.y
          return point( x, y )

3 个答案:

答案 0 :(得分:2)

首先,标准做法是将类大写(所以Point,而不是point)。我也会使用__add__ and __sub__(以及可能的__iadd__ and __isub__)方法。第一次切割可能如下所示:

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

    def __add__(self, p):
        return Point(self.x + p.x, self.y + p.y)

    def __sub__(self, p):
        return Point(self.x - p.x, self.y - p.y)

我知道你正在寻求将逻辑推入单一方法,例如:

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

    def _adjust(self, x, y):
        return Point(self.x + x, self.y + y)

    def __add__(self, p):
        return self._adjust(p.x, p.y)

    def __sub__(self, p):
        return self._adjust(-p.x, -p.y)

......但这似乎更复杂,没有多少收获。

答案 1 :(得分:2)

那是怎么回事:

import operator

class point(object):
    def __init__( self, x, y ):
        self.x, self.y = x, y

    def _do_op(self, op, p):
        x = op(self.x, p.x)
        y = op(self.y, p.y)
        return point(x, y)

    def add( self, p ):
        return self._do_op(operator.add, p)

    def sub( self, p ):
        return self._do_op(operator.sub, p)

答案 2 :(得分:0)

这是你可以做的事情。

def __add__(self, p):   # used this so that you can add using the + operator
    x = self.x + p.x
    y = self.y + p.y
    return point(x, y)

def __sub__(self, p):
    return self + point(-p.x, -p.y)