2015-09-22 3 views
3

Я пытаюсь сделать класс Vector, который принимает три параметра (х, у, г), чтобы вектор, ObjetМожно ли вызвать метод для класса и экземпляра класса?

u=Vector(3,-6,2) #Creates a vector you with components <3,-6,2> 

Одна вещь, которую вы можете сделать с векторами добавить их. Я ищу способ сделать что-то вроде этого:

u=Vector(3,-6,2) 
v=Vector(4,5,-1) 
c=Vector.add(u,v) #returns a third vector, the sum of u and v (c = <7,-1,1>) 
u.add(v) #modifies u to be the sum of u and v (u = <7,-1,1>) 
+0

Вы должны переопределить '__add__' метод. – ozgur

+0

Чтобы ответить на ваш точный вопрос: 'Vector.add (u, v)' такой же, как 'u.add (v)' - Python внутри функции 'add', нет возможности различать их (пока вы не будете использовать третий аргумент или какой-либо другой метод). –

ответ

2

Вы не можете определить метод класса и экземпляра с тем же именем.

Однако вместо создания метода экземпляра .add() я бы переопределил магическую функцию __add__, которая вызывается при добавлении двух экземпляров через знак +. Когда Python пытается оценить x + y, он пытается вызвать x.__add__(y):

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

    def __repr__(self): 
     return '<Vector: {}, {}, {}>'.format(self.x, self.y, self.z) 

    def __add__(self, other): 
     return Vector(self.x + other.x, self.y + other.y, self.z + other.z) 

    @classmethod 
    def add(cls, v1, v2): 
     return cls(v1.x + v2.x, v1.y + v2.y, v1.z + v2.z) 

-

>>> u = Vector(1, 2, 3) 
>>> v = Vector(4, 5, 6) 
>>> c = u + v 
>>> print c 
<Vector: 5, 7, 9> 

>>> c = Vector.add(u, v) 
>>> print c 
<Vector: 5, 7, 9> 
Смежные вопросы