Re: Difference method vs attribut = function

2024-06-30 Thread Dieter Maurer via Python-list
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

2024-06-29 Thread Thomas Passin via Python-list

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

2024-06-29 Thread Mats Wichmann via Python-list

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

2024-06-29 Thread Peter J. Holzer via Python-list
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

2024-06-29 Thread Ulrich Goebel via Python-list
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