Difference method vs attribut = function
Peter J. Holzer
hjp-python at hjp.at
Sat Jun 29 15:53:05 EDT 2024
On 2024-06-28 18:08:54 +0200, Ulrich Goebel via Python-list wrote:
> a class can have methods, and it can have attributes, which can hold a
> function. Both is well known, of course.
>
> My question: Is there any difference?
>
> The code snipped shows that both do what they should do. But __dict__
> includes just the method,
The other way around: It includes only the attributes, not the methods.
> while dir detects the method and the
> attribute holding a function. My be that is the only difference?
>
>
> class MyClass:
> def __init__(self):
> functionAttribute = None
>
> def method(self):
> print("I'm a method")
>
> def function():
> print("I'm a function passed to an attribute")
Here is the other main difference: The object is not passed implicitely
to the function. You have no way to access mc here.
You can create a method on the fly with types.MethodType:
import types
mc.functionAttribute = types.MethodType(function, mc)
> By the way: in my usecase I want to pass different functions to
> different instances of MyClass. It is in the context of a database app
> where I build Getters for database data and pass one Getter per
> instance.
Or in this case, since each function is specific to one instance, you
could just use a closure to capture the object. But that might be
confusing to any future maintainers (e.g. yourself in 6 months), if the
method doesn't actually behave like a method.
hp
--
_ | Peter J. Holzer | Story must make more sense than reality.
|_|_) | |
| | | hjp at hjp.at | -- Charles Stross, "Creative writing
__/ | http://www.hjp.at/ | challenge!"
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://mail.python.org/pipermail/python-list/attachments/20240629/6c0fcb0b/attachment.sig>
More information about the Python-list
mailing list