класс в питоне с методом, действующим на себя.наследование - PullRequest
0 голосов
/ 27 октября 2011

Полагаю, мне было бы легко объяснить вопрос с помощью примера. Предположим, я хочу написать свой собственный векторный класс. И в этом классе, скажем, я хочу определить метод, чтобы добавить 2 вектора что-то вроде:

class vector:
.....
def add(self,other):
    ----some code

так что, в принципе, это будет сделано, если ... вектор то

vec.add(othervec)

сделает дополнение .. но как мне это сделать .. это как наследовать свой собственный класс .. тип данных ? Спасибо

Ответы [ 3 ]

3 голосов
/ 27 октября 2011

Если вы хотите добавить два класса, я бы посмотрел на функцию __add__, которая позволяет выполнять обычное сложение (а не вызывать .add()):

a + b

Что касается вашего вопроса, я не совсем уверен в том, что вы спрашиваете. Я написал свой класс Vector() так:

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

  def __add__(self, other):
    return Vector(self.x + other.x, self.y + other.y, self.z + other.z)
2 голосов
/ 27 октября 2011

В Python вы должны использовать утка, набрав , то есть вообще не беспокоиться о типе:

class Vector(object):
  def __init__(self, x, y):
    self.x = x
    self.y = y
  def add(self, othervec):
    return Vector(self.x + othervec.x, self.y + othervec.y)

Если вы хотите, вы можете add изменить Объект Vector вместо возврата нового.Однако, это делает ваш класс изменчивым и, следовательно, труднее иметь дело:

  def add_mutable(self, othervec):
    self.x += othervec.x
    self.y += othervec.y
1 голос
/ 27 октября 2011

конечно, вы можете сделать точно так, как вы сказали, предположим, что вы хотите добавить / изменить функциональность списка

class Vector(list):

    def add(self, v):
        list.extend(self, v)

, и вы можете использовать его так:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...