Re: Difference method vs attribut = function
Ulrich Goebel wrote at 2024-6-28 18:08 +0200: >Hi, > >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? I think you should make the distinction "class versus instance attribute" rather than "mether versus function". If you look at the `__dict__` of an instance, you see only the instance variables (the class's `__dict__` gives you the (most) attributes of the class). You can access (most) class attributes via an instance; if a function is accessed in this way, it becomes (typically) a method. -- https://mail.python.org/mailman/listinfo/python-list
Re: Difference method vs attribut = function
On 6/28/2024 12:08 PM, Ulrich Goebel via Python-list wrote: Hi, 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, 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") mc = MyClass() mc.functionAttribute = function mc.method() mc.functionAttribute() print('Dict: ', mc.__dict__)# shows functionAttribute but not method print('Dir: ', dir(mc))# shows both functionAttribute and method 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. Thanks for hints Ulrich https://docs.python.org/3/library/functions.html#dir - object.__dict__¶ A dictionary or other mapping object used to store an object’s (writable) attributes. dir(object) ... With an argument, attempt to return a list of valid attributes for that object. "functionAttribute" is a class method, not an instance method. If you want an instance method: class MyClass: def __init__(self): functionAttribute = None self.instance_functionAttribute = None def method(self): print("I'm a method") -- https://mail.python.org/mailman/listinfo/python-list
Re: Difference method vs attribut = function
On 6/28/24 10:08, Ulrich Goebel via Python-list wrote: 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. If I understood what you're trying to accomplish, you could take a look here (possibly a bit complex for what you need). https://refactoring.guru/design-patterns/strategy/python/example -- https://mail.python.org/mailman/listinfo/python-list
Re: Difference method vs attribut = function
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. |_|_) || | | | h...@hjp.at |-- Charles Stross, "Creative writing __/ | http://www.hjp.at/ | challenge!" signature.asc Description: PGP signature -- https://mail.python.org/mailman/listinfo/python-list
Difference method vs attribut = function
Hi, 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, 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") mc = MyClass() mc.functionAttribute = function mc.method() mc.functionAttribute() print('Dict: ', mc.__dict__)# shows functionAttribute but not method print('Dir: ', dir(mc))# shows both functionAttribute and method 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. Thanks for hints Ulrich -- Ulrich Goebel -- https://mail.python.org/mailman/listinfo/python-list