Python中的 __init__函数,self参数

1  __init__()函数

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__()这个特殊的方法(函数)可以方便地自己对类的属性进行定义;

        成员函数需要被手动调用,而构造函数在创建对象的过程中是自动被调用的;

2 python类中的self

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怎么理解和使用? - 知乎

自己做记录使用,希望大家去看原作者的,更清晰!!

你可能感兴趣的:(编程,python)