1 在python中 定义类时,经常会写这个函数;
2 写这个函数的作用:
创建该类实例(对象)时会立即调用该函数,就是为类进行初始化;
init()参数值可以有多种形式;
3 两个下划线开头的函数是声明该属性为私有,不能在类的外部被使用或访问;
class BotRGCN(nn.Module):
def __init__(self,des_size=768,num_prop_size=6,cat_prop_size=11,embedding_dimension=128,dropout=0.3):
super(BotRGCN, self).__init__()
self.dropout = dropout
self.linear_relu_des=nn.Sequential(
nn.Linear(des_size,int(embedding_dimension/3)),
nn.LeakyReLU()
)
# self.linear_relu_tweet=nn.Sequential(
# nn.Linear(tweet_size,int(embedding_dimension/4)),
# nn.LeakyReLU()
# )
self.linear_relu_num_prop=nn.Sequential(
nn.Linear(num_prop_size,int(embedding_dimension/3)),
nn.LeakyReLU()
)
self.linear_relu_cat_prop=nn.Sequential(
nn.Linear(cat_prop_size,int(embedding_dimension/3)),
nn.LeakyReLU()
)
self.linear_relu_input=nn.Sequential(
nn.Linear(embedding_dimension,embedding_dimension),
nn.LeakyReLU()
)
self.rgcn=RGCNConv(embedding_dimension,embedding_dimension,num_relations=2)
self.linear_relu_output1=nn.Sequential(
nn.Linear(embedding_dimension,embedding_dimension),
nn.LeakyReLU()
)
self.linear_output2=nn.Linear(embedding_dimension,2)
这个过程中,通过self.dropot=dropout将数据封装在类中,调用时直接通过类BotRGCN进行调用。
4. init函数(方法)的第一个参数必须是self(self为习惯用法,约定俗成的东西),后面的参数则可以自由定义,和定义函数没有任何区别;
5 在类中定义init()方法,方便创建实例的时候,给实例绑定上通用的属性,方便类中的方法(函数)的定义(不用重复传参数);
6. 获取类的属性
class Rectangle():
def __init__(self,a,b):
self.a = a
self.b = b
def getPeri(self):
return (self.a + self.b)*2
rect = Rectangle(3,4)
print(rect.__dict__) #获取类的属性情况
7 __init__()方法(函数)又被称为构造器(constructor)或构造函数
用__init__()这个特殊的方法(函数)可以方便地自己对类的属性进行定义;
成员函数需要被手动调用,而构造函数在创建对象的过程中是自动被调用的;
init(self,参数)和__init__(self)区别
1 两种类型的init定义方式如下:
class Person:
# def __init__(self):
# self.name=None
# self.gender=None
# self.age=None
def __init__(self,name,gender,age):
self.name=name
self.gender=gender
self.age=age
前者__init__()方法中只有self,但在方法的类部包含三个属性。而后者在定义方法的时候,直接给定三个参数(实例化类时传过来的)
2 两者的实例化方法如下:
#person=Person()
#person.name='lisa'
#person.gender='female'
#person.age=18
person2=Person('lisi','male',20)
主要的区别在于:
前者定义类可以是一个空结构,当有输入进来的时候再添加相应的数据;
后者则必须传值,不予许为空值。
3 因为在定义类时,我们需要东西去指定这个类所创建的对象,这样才能调用一系列的方法。
而在定义类时,我们是没有对象的,类都还在定义中哪里去创建对象,所以这时我们规定统一用一个self来指定类的实例,这样我们就才能定义一些类的方法。
4 self只有在类的方法中才会有,独立的函数或方法是不必带有self的;
self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数;
5 self名称不是必须的,在python中self不是关键词,你可以定义成a或b或其它名字都可以;
6 self指的是类实例对象本身(注意:不是类本身);
参考: Python中 __init__函数以及参数self怎么理解和使用? - 知乎
自己做记录使用,希望大家去看原作者的,更清晰!!