python - 作为类属性的函数
问题描述
我正在编写一个类,我想将函数作为类属性传递并稍后使用它,如下所示:
class Nevronska_mreza:
def __init__(self, st_vhodni, st_skriti, st_izhod, prenosna_funkcija=pf.sigmoid):
self.mreza = []
self.st_vhodni = st_vhodni
self.st_skriti = st_skriti
self.st_izhodni = st_izhod
self.prenosna_funckija = prenosna_funkcija
self.mreza.append([{'utezi': [random() for i in range(st_vhodni + 1)]} for j in range(st_skriti)])
self.mreza.append([{'utezi': [random() for i in range(st_skriti + 1)]} for j in range(st_izhod)])
def razsirjanje_naprej(self, vhod):
for sloj in self.mreza:
nov_vhod = []
for nevron in sloj:
nevron['izhod'] = self.prenosna_funkcija(self.aktivacijska_funkcija(nevron['utezi'], vhod))
nov_vhod.append(nevron['izhod'])
vhod = nov_vhod
return vhod
但似乎这不是正确的方法,我收到以下错误:
AttributeError:“Nevronska_mreza”对象没有属性“prenosna_funkcija”
有可能做这样的事情吗?
解决方案
是的,您可以将函数作为参数传递,但是您犯了几个错误。
首先,您使用了函数一词,尽管它不是保留词,但应避免将其作为实体名称,例如变量。
其次,您在强制参数之前使用了可选参数,这将导致错误,例如:
File "test.py", line 5
def __init__(self, function=fun1, data1, data2):
^
SyntaxError: non-default argument follows default argument
第三,在调用方法时没有指定作用域,函数名在对象的自身作用域内。
考虑到所有这些,以下是工作代码
def fun1(x):
return x+1
class A:
def __init__(self, data1, data2, fn=fun1):
self.fn = fn
self.data1 = data1
self.data2 = data2
def some_method(self):
y = self.fn(self.data1)
print(y)
b = A(1, 2, fun1)
b.some_method()
发布完整代码后,我可以看到您当前在以下行中有 self.prenosna_funckija 而不是 prenosna_funkcija:
self.prenosna_funckija = prenosna_funkcija
这可以解释属性错误,因为当您调用 self.prenosna_funkcija 时,它确实不存在。
推荐阅读
- javascript - Chart.js 中未显示折线图
- javascript - 使用 javascript 重新加载 mvc/razor 部分视图
- python - 具有动态垂直但固定水平大小的 QWidget
- azure - AZURE vm,未配置
- python - 将 numpy 数组从 @njit 函数传递给 C 函数
- c++ - SDL2 能否一次渲染两个不同的窗口,每个窗口都有自己的 SDL_Window 和 SDL_Renderer?
- javascript - 如果第一个表的至少一个复选框未选中,则无法使用 JavaScript 选中第二个表的任何复选框
- python-3.x - Python:识别涉及哪个 excel 单元格
- javascript - TypeError:无法读取未定义的属性“跟随”
- exception - 在 .Net Core MVC 中使用 Hellang 中间件进行异常处理