Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 选择类函数作为参数_Python_Function_Class - Fatal编程技术网

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”啊,你可以发送这样的函数,比在类中使用它方便得多,谢谢!啊,很好,你可以发送这样的函数,比在课堂上使用更方便,谢谢!