ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

__call__、__init__和 forward三个函数在python中的调用方法

2021-02-11 09:32:08  阅读:252  来源: 互联网

标签:__ 函数 python self forward init print


这三个函数包括了Python中特有的重载函数,以及神经网络中向前传播的重要函数。这是我看到的比较清楚的说明Python中这三个函数功能的博客。
转载地址:博客引入来源

init: 类的初始化函数,类似于c++的构造函数
call_: 使得类对象具有类似函数的功能。
__init__比较好理解,现在主要看一下 __call__的功能示例:

class A():
def call(self):
print(‘i can be called like a function’)

a = A()
a()
out:

i can be called like a function

让我们在调用时传入参数如何?

class A():
def call(self, param):

    print('i can called like a function')
    print('掺入参数的类型是:', type(param))

a = A()

a(‘i’)
out:

i can called like a function
掺入参数的类型是: <class ‘str’>

发现对象a的表现完全类似一个函数。

那当然也可以在__call__里调用其他的函数啊,
在__call__函数中调用forward函数,并且返回调用的结果

class A():
def call(self, param):

    print('i can called like a function')
    print('传入参数的类型是:{}   值为: {}'.format(type(param), param))

    res = self.forward(param)
    return res

def forward(self, input_):
    print('forward 函数被调用了')

    print('in  forward, 传入参数类型是:{}  值为: {}'.format( type(input_), input_))
    return input_

a = A()

input_param = a(‘i’)
print(“对象a传入的参数是:”, input_param)

out:

i can called like a function
传入参数的类型是:<class ‘str’> 值为: i
forward 函数被调用了
in forward, 传入参数类型是:<class ‘str’> 值为: i
对象a传入的参数是: i

现在我们将初始化函数__init__也加上,来看一下:
在对象初始化时确定初始年龄,通过调用a(2)为对象年龄增加2岁,

class A():
def init(self, init_age):
super().init()
print(‘我年龄是:’,init_age)
self.age = init_age

def __call__(self, added_age):
    

    res = self.forward(added_age)
    return res

def forward(self, input_):
    print('forward 函数被调用了')
    
    return input_ + self.age

print(‘对象初始化。。。。’)
a = A(10)

input_param = a(2)
print(“我现在的年龄是:”, input_param)

out:

对象初始化。。。。
我年龄是: 10
forward 函数被调用了
我现在的年龄是: 12

pytorch主要也是按照__call__, init,forward三个函数实现网络层之间的架构的

这博客讲述了pytorch中具体实现:https://blog.csdn.net/dss_dssssd/article/details/82977170

标签:__,函数,python,self,forward,init,print
来源: https://blog.csdn.net/qq_37844044/article/details/113788280

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有