>From your description, Chris, it sounds like the functional programming technique often called currying. A factory function is created where one (or more) parameters are sort of frozen in so the user never sees or cares about them, and a modified or wrapped function is returned. In this case, the function now knows what object it is attached to as this.
-----Original Message----- From: Python-list <python-list-bounces+avi.e.gross=gmail....@python.org> On Behalf Of Chris Angelico Sent: Saturday, September 17, 2022 8:21 PM To: python-list@python.org Subject: Re: How to replace an instance method? On Sun, 18 Sept 2022 at 09:37, Eryk Sun <eryk...@gmail.com> wrote: > > On 9/17/22, Chris Angelico <ros...@gmail.com> wrote: > > > > The two are basically equivalent. Using functools.partial emphasizes > > the fact that all you're doing is "locking in" the first parameter; > > using the __get__ method emphasizes the fact that functions are, > > fundamentally, the same thing as methods. Choose whichever one makes > > sense to you! > > Functions are really not "fundamentally, the same thing as methods". > They're only the same in that they're both callable. Also, a method's > __getattribute__() falls back on looking up attributes on the > underlying function (i.e. the method's __func__), such as inspecting > the __name__ and __code__. A fundamental difference is that, unlike a > function, a method is not a descriptor. Thus if a method object is set > as an attribute of a type, the method does not rebind as a new method > when accessed as an attribute of an instance of the type. An unbound method in Python 2 was distinctly different from a function, but in Python 3, they really truly are the same thing. A bound method object is a small wrapper around a function which binds its 'self' parameter; that's a distinction, but not a fundamental one. Yes, a bound method isn't a descriptor; that's not really a huge difference either, though. A method IS a function. A bound method is a function with one argument locked in, but still a function. ChrisA -- https://mail.python.org/mailman/listinfo/python-list -- https://mail.python.org/mailman/listinfo/python-list