2017-02-18 10 views
0

Если я определяю метод объекта:Почему самоопределение в определении метода дважды не работает?

Почему это:

def forecasts(self, rules = self.rules): 
    return rules 

дают self не определенную ошибку, но:

def forecasts(self, rules=None):                                                   
    if rules is None:                                                              
    rules = self.rules 
return rules 

работу?

+0

Также дубликат http://stackoverflow.com/questions/13195989/default-values-for-function-parameters-in-python и http://stackoverflow.com/questions/7371244/using-self-as- default-value-for-a-method и http://stackoverflow.com/questions/8131942/python-how-to-pass-default-argument-to-instance-method-with-an-instance-variab – trincot

ответ

0

Вы определяете аргумент по умолчанию, который необходимо получить, когда функция определена.

Когда Python пытается оценить эту функцию, он попытается загрузить имя с именем self, найдите на нем атрибут. а затем установите его как значение по умолчанию для rules.

Вы не назначаем имя параметра, как вы делаете, когда вы просто используете self как позиционные, вы на самом деле вычисления выражения, self.rules, который нуждается в self быть определены.