选择一个类函数作为参数

时间:2018-03-17 12:48:50

标签: 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 propagate(...):
         (...)
         if self.func == 'sig':
             (...)
         else:
             (...)

         (...)

         if self.func == 'sig':
             (...)
         else:
             (...)

         (and so on...)

所有if / else语句最终都会使代码变得非常冗长,是否有更简洁的方法来选择函数?

2 个答案:

答案 0 :(得分:1)

这是你的目标吗?

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)

答案 1 :(得分:1)

如果有问题的函数在类的外部,您只需传入函数

即可
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)

如果方法采用不同的参数,那么它会变得更复杂一些。