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.
|_|_) | |
| | |
[email protected] | -- Charles Stross, "Creative writing
__/ |
http://www.hjp.at/ | challenge!"
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEETtJbRjyPwVTYGJ5k8g5IURL+KF0FAmaAZhgACgkQ8g5IURL+ KF1xXw//dkGR4zGztKyqgcQmdBjKjGHKI3V5GoPAzVIOsNYINwN+Fi5od678MYdX d3likfjZOOlJrJHI3NWL8uIU3yBbKfeB5yjXVH0UbYmzYixlkl8x9xhujtSGbTLm uQgV8FlVs4qQfo2ZZhmlRpSRQq4wdRbyQFDDwENm/BflEj64Efx+PbVi11xQgMg4 sTLWU84+xc2aVHs2vv6k8hzrZCUEM67m6uR9ftNZ/DNgCel6qEXs8sTDZ+t3/whj 6X6w3Ve1k0Pp41wdlU8Qy8YZ7jBtRcV703ardrMZx1O8dsWpsl7VPgxpZ+XO7zC0 IftF7b6xmaMiTsJ135of+AUwT0FpfTp23FrHe4rGGqBModru/MuU1cBA4JORAgQq LwRfrfWerUKRGKd04PoAEUFpmPcj35t7FHWv2SY0awHGs60aQjS/j0D+WKh0q78k NEZz0cEdfOq8pICdDwkyGP+0aNgat71wgW4NSMaqLQxiEICRxApP1AYUxl8QqQd6 ClVRdIDPrAFY8NYm2Tdp/TofH4dfTAGtJKZapUgPQJEvwMbac9lSYdafHqzFRDGN oR4FJgULf4bqQNLkmXeV9GtVIiMkDZ/ch+OnDbjMMU4k0o6iL5grYbuMe8kI2KEB OwoHl7QTgJFtsDsYr40o1dP40EZ27L4QKkE5KwD