Using my routines as functions AND methods
Peter J. Holzer
hjp-python at hjp.at
Sat Jan 6 11:53:43 EST 2024
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.
|_|_) | |
| | | hjp at hjp.at | -- Charles Stross, "Creative writing
__/ | http://www.hjp.at/ | challenge!"
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://mail.python.org/pipermail/python-list/attachments/20240106/97b2228c/attachment.sig>
More information about the Python-list
mailing list