23.3_运算符重载
23.3 运算符重载
现在step22.py中的大部分代码已经移动完成了。接下来要把进行运算符重载的代码移到dezero。为此,我们要在dezero/core/simple.py(核心文件)中添加以下函数。
dezero/core/simple.py
def setup_variable():
Variable._add_ = add
Variable._radd_ = add
Variable._mul_ = mul
Variable._rmul_ = mul
Variable._neg_ = neg
Variable._sub_ = sub
Variable._rsub_ = rsub
Variable._truediv_ = div
Variable._rtruediv_ = rdiv
Variable._pow_ = powsetup_variable函数用于重载Variable的操作符。调用这个函数后,函数内部会设置Variable的操作符。那么最好在哪里调用这个函数呢?dezero/init.py文件就很合适。
init.py文件是导入模块时执行的第1个文件。拿现在的情况来说,导入dezero包中的模块后,首先被调用的是dezero/init_.py中的代码。这里我们在dezero/init_.py中编写以下代码。
dezero/init.py
fromdezero.core.simple importVariable
fromdezero.core.simple import Function
fromdezero.core.simple import using_config
fromdezero.core.simple import no_grad
fromdezero.core.simple import as_array
fromdezero.core.simple import as_variable
fromdezero.core.simple import setup_variable
setup_variable()上面的代码导入了setup_variable函数并调用了它。这样一来,dezero包的用户将始终能够在操作符重载被预先设置了的情况下使用Variable。另外,在__init__.py的顶部有这样一行代码:fromdezero.core-simple import Variable。有了这条语句,用户就可以直接使用dezero包中的Variable类。示例代码如下所示。
使用dezero的用户的代码
fromdezero.core.simpleimportVariable
fromdezeroimportVariable
如上所示,我们可以把之前写的fromdezero.core-simple import Variable替换成fromdezero import Variable。有了dezero/init_.py中的这些导入语句,对于剩下的Function和using_config等,用户都可以使用这种简洁版的导入方式。