具有多态性的类的枚举

问题描述 投票:0回答:1

在下面的

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”。

python enums polymorphism
1个回答
0
投票

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)
© www.soinside.com 2019 - 2024. All rights reserved.