Using my routines as functions AND methods

Thomas Passin list1 at tompassin.net
Wed Jan 3 23:17:34 EST 2024


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




More information about the Python-list mailing list