2015-02-27 4 views
1

У меня эти два класса, но я хочу знать, как лучше всего вызвать функцию внутри класса.Лучший способ вызова метода - Python

Мне нравится использовать этот с атрибутами:

class myclass(): 
    def myfunction(self): 
     return self.x + self.y 

z = myclass() 
z.x = 4 
z.y = 3 
print z.myfunction() 

Но я не знаю, если это правильно. Или я должен использовать это вместо последнего?

class myclass(): 
    def myfunction(self,x,y): 
     return x + y 

z = myclass() 
print z.myfunction(4,3) 
+0

Второй один обычный способ сделать это. Я бы даже не подумал о первом. Возможно, есть недостающий контекст, поскольку вы упростили проблему? –

+0

Вы собираетесь использовать x и y где-нибудь еще в своем классе? –

+0

Да. И это всего лишь пример, скажем, у меня в моем классе много методов. А метод «a» вызывает метод «b», а метод «b» нуждается в некоторых значениях из метода «a». Это то, что я хочу знать. Но тогда я немного смущен, потому что я не знаю, правильно ли вызывается метод, использующий атрибуты, а не параметры. – am17

ответ

9

От этого зависит. Есть x и y часть состояния myclass() или они что-то внешнее взаимодействуют с классом?

Если x и y не являются частью состояния экземпляра myclass(), они не должны храниться в атрибутах. Вместо этого они будут переданы в качестве аргументов.

Допустим, у вас есть автомобиль, и вам нужно знать, что произойдет с автомобилем, если оно столкнется с чем-то другим. Это «что-то еще» не является частью автомобиля, так что вы хотите вызвать метод car.collide() и передать в «нечто другое» в качестве аргумента:

car.collide(something_else) 

, но скорость автомобиля в момент столкновения , а также такие вещи, как масса автомобиля, являются частью состояния объекта автомобиля, таким образом, они являются атрибутами:

car.speed = 80 
car.mass = 1200 
car.collide(something_else) 
+0

Гораздо лучше, чем мой ответ. Спасибо за контекстуализацию реферата! –

+0

Допустим, у меня в моем классе много методов. А метод «a» вызывает метод «b», а метод «b» нуждается в некоторых значениях из метода «a». Это то, что я хочу знать. Но тогда я немного смущен, потому что я не знаю, правильно ли вызывается метод, использующий атрибуты, а не параметры. – am17

+2

@Vashh: если вы устанавливаете атрибуты * just * для вызова метода, то это неверно. Атрибуты говорят что-то об объекте и обычно диктуют поведение более чем одним методом. –

Смежные вопросы