On 2024-01-03 23:17:34 -0500, Thomas Passin via Python-list wrote: > 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)
You omitted the first argument (obj). That should be def f1(obj, x): print(x) > f1('The plain function') > > class Class1: > pass o = Class1() f1(o, 'The plain function') works for me. > class Class2: > pass > > c1 = Class1() > c1.newfunc = f1 > c1.newfunc('f1 assigned to instance') # Works as intended Now this doesn't work any more (but the OP doesn't want that anyway, AFAICT). > Class2.newfunc = f1 > c2 = Class2() > c2.newfunc('f1 assigned to class') # Complains about extra argument But this does. 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