I\'m trying to rewrite some code using classes. At some point what I want is assign a member function a particular definition using a parameter value for each instance of an
I think what has confused you here is that you're accessing the method via the class attribute activationFunctions
, rather than (as an instance would normally be accessed) on the instance itself. For example, given:
class Class:
def method(self, foo, bar):
print(self, foo, bar)
methods = {'method': method}
When we call the method directly from the dictionary:
>>> Class.methods['method'](1, 2, 3)
1 2 3
You can see that we're passing 1
as the self
parameter; the method isn't being called on an instance, so no instance is being injected. By contrast, when we call it on an instance:
>>> instance = Class()
>>> instance.method(1, 2)
<__main__.Class object at 0x...> 1 2
Now our arguments are foo
and bar
, and the instance is self
. That's why you think a different number of parameters seem to be required.
In this case, as you don't actually need the instance state in your method, just make it a regular function (note minor revisions for PEP-8 compliance):
def non_linear_bipolar_step(x, string=None):
if string is not None:
return -1 if x < 0 else 1
return '-' if x < 0 else '1'
class Activation:
activation_functions = {
'bipolar': non_linear_bipolar_step,
}
...
This is likely less confusing.