Назначение переменной приватному методу


Я работал над проектом, который использует python sdk от Google App Engine. Я копался в нем и видел много подобных методов.

def _put(self, bla, bla):
    do something
put = _put

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

def put(self, bla, bla):
    do something

Единственное, что я могу придумать, это то, что это делается таким образом, чтобы соответствовать некоторому " правильному стилю кодирования" правила. Я в основном интересовался, потому что хотел бы лучше писать правильный код python и хотел знать, должен ли я делать это сам?

Править: Спасибо @falsetru за ссылку! Вот о чем я говорю. (https://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/ext/ndb/model.py?r=410#3340)

2   6   2014-02-04 18:50:51

2 ответа:

Объяснение Гвидо для этого паттерна в коде NDB:

NDB имеет другое правило для открытых и защищенных имен. Многие (но не все) имена, начинающиеся с подчеркивания, на самом деле считаются открытыми API, потому что мы не хотим резервировать их имена методов в качестве имен свойств. Мы просто присваиваем псевдонимы более удобным именам без подчеркивания для удобства (например, реальный метод-_put (), и вы действительно должны использовать его, но мы позволяем вам использовать put() до тех пор, пока вы не имеют свойства с именем "put").

Только одна (немного) разумная цель этого - закрытие :

def wrapper():
    x = 2
    def _put(self, bla, bla):
       return x + 2

    self.put = _put