在下面的
Enum
继承中,对成员值调用多态方法会产生意想不到的结果。
from enum import Enum
class Activation:
def activate(self, value):
print("in activation")
pass
def derivative(self, value):
pass
class Relu(Activation):
def activate(self, value):
print('in relu')
return max(0, value)
def derivative(self, value):
return 0 if value<= 0 else 1
class Activations(Activation, Enum):
RELU = Relu()
#TANH = Tanh()
#SIGMOID = Sigmoid()
#SOFTMAX = Softmax()
activ1 = Relu().activate(11) # output: in relu
activ2 = Activations.RELU.activate(11) # output: in activation
activ2
输出为“激活中”,而所需输出为“relu”。
Enum
成员的值与您提供的不同。它们是 Activations
的实例,其中 value
属性具有您提供的值。
你需要做的事:
activ2 = Activations.RELU.value.activate(11)
或者你可以在
Activations
上进行 value
类调用方法:
class Activations(Enum):
RELU = Relu()
#TANH = Tanh()
#SIGMOID = Sigmoid()
#SOFTMAX = Softmax()
def activate(self, *args, **kwargs):
return self.value.activate(*args, **kwargs)
def derivative(self, *args, **kwargs):
return self.value.derivative(*args, **kwargs)
activ2 = Activations.RELU.activate(11)