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_ = pow

setup_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等,用户都可以使用这种简洁版的导入方式。