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