Re: Using my routines as functions AND methods

Thomas Passin <[email protected]>
Newsgroups comp.lang.python
Message-ID <[email protected]>
On 1/3/2024 8:00 PM, Alan Gauld via Python-list wrote:
> On 03/01/2024 22:47, Guenther Sohler via Python-list wrote:
>> Hi,
>>
>> In my cpython i have written quite some functions to modify "objects".
>> and their python syntax is e.g.\
>>
>> translate(obj, vec). e.g whereas obj is ALWAYS first argument.
> 
>> However, I also want to use these functions as class methods without having
>> to
>> write the function , twice. When using the SAME function as a methos, the
>> args tuple must insert/contain "self" in the first location, so i have
>> written a function to do that:
> 
> I'm probably missing something obvious here but can't you
> just assign your function to a class member?
> 
> def myFunction(obj, ...): ...
> 
> class MyClass:
>      myMethod = myFunction
> 
> 
> Then you can call it as
> 
> myObject = MyClass()
> myObject.myMethod()
> 
> A naive example seems to work but I haven't tried anything
> complex so there is probably a catch. But sometimes the simple
> things just work?

That works if you assign the function to a class instance, but not if 
you assign it to a class.

def f1(x):
     print(x)
f1('The plain function')

class Class1:
     pass

class Class2:
     pass

c1 = Class1()
c1.newfunc = f1
c1.newfunc('f1 assigned to instance') # Works as intended

Class2.newfunc = f1
c2 = Class2()
c2.newfunc('f1 assigned to class')  # Complains about extra argument
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.