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.
|_|_) | |
| | | [email protected] | -- Charles Stross, "Creative writing
__/ | http://www.hjp.at/ | challenge!"
signature.asc
Description: PGP signature
-- https://mail.python.org/mailman/listinfo/python-list
