Python 选择类函数作为参数
所以在我的类中,我想选择一个函数作为激活函数作为参数。目前我是通过Python 选择类函数作为参数,python,function,class,Python,Function,Class,所以在我的类中,我想选择一个函数作为激活函数作为参数。目前我是通过 class NeuralNetworks: def __init(self, n_inputs, layer_vector, func='sig'): (...) self.func = func def sigmoid(self, x): (...) def reLu(self, x): (...) def propaga
class NeuralNetworks:
def __init(self, n_inputs, layer_vector, func='sig'):
(...)
self.func = func
def sigmoid(self, x):
(...)
def reLu(self, x):
(...)
def propagate(...):
(...)
if self.func == 'sig':
(...)
else:
(...)
(...)
if self.func == 'sig':
(...)
else:
(...)
(and so on...)
所有if/else语句最终都会使代码变得非常冗长,有没有更简洁的方法来选择函数 这就是你的目标吗
class NeuralNetworks:
def __init__(self, func='sigmoid'):
self.func = getattr(self, func)
def sigmoid(self, x):
print('sigmoid()', x)
def reLu(self, x):
print('reLu()', x)
def propagate(self, x):
self.func(x)
NeuralNetworks().propagate(123)
NeuralNetworks(func = 'reLu').propagate(456)
这就是你的目标吗
class NeuralNetworks:
def __init__(self, func='sigmoid'):
self.func = getattr(self, func)
def sigmoid(self, x):
print('sigmoid()', x)
def reLu(self, x):
print('reLu()', x)
def propagate(self, x):
self.func(x)
NeuralNetworks().propagate(123)
NeuralNetworks(func = 'reLu').propagate(456)
如果所讨论的函数在类外部,则只需传入函数即可
def somefunc(parm1, parm2):
pass
nn = NeuralNetworks(inputs, vector, somefunc)
如果“函数”是类上的一个方法,那么您可以将所有替代项存储在dict
中,并从那里访问它们:
class NeuralNetworks:
def __init__(self, n_inputs, layer_vector, func='sig'):
(...)
self.funcdict = {'sig' : self.sigmoid,
'relu' : self.reLu,
'other': self.otherfunc}
self.func = func
def sigmoid(self, x):
(...)
def reLu(self, x):
(...)
def propagate(...):
(...)
# if self.func == 'sig':
# (...)
# else:
# (...)
self.funcdict[self.func](x)
如果这些方法采用不同的参数,那么它会变得更复杂一些 如果所讨论的函数在类外部,则只需传入函数即可
def somefunc(parm1, parm2):
pass
nn = NeuralNetworks(inputs, vector, somefunc)
如果“函数”是类上的一个方法,那么您可以将所有替代项存储在dict
中,并从那里访问它们:
class NeuralNetworks:
def __init__(self, n_inputs, layer_vector, func='sig'):
(...)
self.funcdict = {'sig' : self.sigmoid,
'relu' : self.reLu,
'other': self.otherfunc}
self.func = func
def sigmoid(self, x):
(...)
def reLu(self, x):
(...)
def propagate(...):
(...)
# if self.func == 'sig':
# (...)
# else:
# (...)
self.funcdict[self.func](x)
如果这些方法采用不同的参数,那么它会变得更复杂一些 如果您想在某个变量中获取函数名,然后执行它,那么请选中“getattr”如果您想在某个变量中获取函数名,然后执行它,那么请选中“getattr”啊,你可以发送这样的函数,比在类中使用它方便得多,谢谢!啊,很好,你可以发送这样的函数,比在课堂上使用更方便,谢谢!