Я знаю функции высокого порядка и замыкание, которое создается с помощью функции return. В большинстве случаев я нахожу это полезным и повторяю его. Мой вопрос здесь связан с замыканием, которое создается с определением класса и со ссылкой на функцию экземпляра класса, возвращаемую из вызова функции. Может ли это быть классифицировано как обычное закрытие или это что-то еще из литературы по Python (или программированию)? Вот пример:
class Klass:
def __init__(self, val):
self.val = val
def ret_val(self):
return self.val
def gen_val_fn(val):
inst = Klass(val)
return inst.ret_val
fn5 = gen_val_fn(5)
fn6 = gen_val_fn(6)
print("first: {}".format(fn5()))
print("second: {}".format(fn6()))
Как здесь работают внутренние органы? Мое предположение здесь заключается в том, что после вызова gen_val_fn(5)
создается первый экземпляр Klass, и он не является сборщиком мусора, пока fn5
не будет сборщиком мусора. Таким образом, он может создавать val=5
как замыкание (я не уверен, что это может быть правильной терминологией). Есть ли какие-либо документы или внутренние знания, которые вы можете указать на это? Или объясните, если в этом объяснении есть недостатки.
Спасибо!