我有一個類Node
它應該包含激活功能。但是,在使用kwargs
創建對象時,必須確定它的激活函數。像這樣,如何在Python中創建對象之前使成員函數不確定?
n1 = Node(activation='name_of_activation function')
我有工作的例子,但我不知道我是否錯過了一些東西。這是我的代碼:
import math
def Signum(x):
return 1 if x > 0 else 0
def Sigmoid(x):
return math.tanh(x)
def Sin(x):
return math.sin(x)
class Node():
'''
This is class of one node
Each node contains an activation function.
'''
def __init__(self, **kwargs):
#possible functions
self.__functions = { 'sgn' : Signum, 'sigmoid' : Sigmoid, 'sin' : Sin }
self.__activate = self.__functions[kwargs.get('activation', Sigmoid)]
def Activation(self, input_value):
return self.__activate(input_value)
n1 = Node(activation='sgn')
n2 = Node(activation='sigmoid')
n3 = Node(activation='sin')
print n1.Activation(-1), n2.Activation(-1), n3.Activation(-1)
我不知道這是否是正確的,做我想做的以這種方式,即碰巧我有兩個引用一個函數:self.__activate
和Activation
。但我不知道如何擺脫它,因爲:
- 一方面,我想使用鍵值原則來聲明一個對象。
- 另一方面,它需要可以在課堂外調用方法。
問題:如何離開未定,直到它通過kwarg確定對象的申報的瞬間激活功能?此外,還需要調用課堂外的激活功能。
+1檢查該功能是否可調用更好。但。還有兩個引用一個函數。而且我不喜歡時間變量('激活'),它們在物體存在的同時存在。 – BogdanSikach
@Wolfgang,'activation'只是一個指針,一旦創建了對象並且你的代碼超出了'__init__'的範圍就會過期。 – Netwave
你是對的。忘記'__init__'。 – BogdanSikach