Я прочитал пост SO * * * * * *. * * * * * * * * * * * * * * * * * * * * * * * * * * * *.Я думаю, что понимаю использование self
в классах Python и соглашениях в них.
Однако, будучи относительно новым для Python и его идиом, я не могу понять, почему некоторые используют self
в определении функции процедурного типа.Например, в документации Python о целочисленных типах пример функции:
def bit_length(self):
s = bin(self) # binary representation: bin(-37) --> '-0b100101'
s = s.lstrip('-0b') # remove leading zeros and minus sign
return len(s) # len('100101') --> 6
Замена self
на num
- это тот же функциональный результат;то есть:
def bit_length(num):
s = bin(num) # binary representation: bin(-37) --> '-0b100101'
s = s.lstrip('-0b') # remove leading zeros and minus sign
return len(s) # len('100101') --> 6
Нет такой идиомы, как __init__
и т. д., которую я могу увидеть здесь, почему self
используется в первом случае.Я видел это использование self
в других местах и в процедурных функциях, и считаю его запутанным.
Итак, мой вопрос: если нет класса или метода, зачем использовать self
в определении функции, а не в описательном имени параметра?