当前位置:   article > 正文

Python中的 __init__函数,self参数_python类的init 里self的属性可以获取吗

python类的init 里self的属性可以获取吗

1  __init__()函数

1 在python中 定义类时,经常会写这个函数;

2 写这个函数的作用:

        创建该类实例(对象)时会立即调用该函数,就是为类进行初始化;

        init()参数值可以有多种形式;

3 两个下划线开头的函数是声明该属性为私有,不能在类的外部被使用或访问;

  1. class BotRGCN(nn.Module):
  2. def __init__(self,des_size=768,num_prop_size=6,cat_prop_size=11,embedding_dimension=128,dropout=0.3):
  3. super(BotRGCN, self).__init__()
  4. self.dropout = dropout
  5. self.linear_relu_des=nn.Sequential(
  6. nn.Linear(des_size,int(embedding_dimension/3)),
  7. nn.LeakyReLU()
  8. )
  9. # self.linear_relu_tweet=nn.Sequential(
  10. # nn.Linear(tweet_size,int(embedding_dimension/4)),
  11. # nn.LeakyReLU()
  12. # )
  13. self.linear_relu_num_prop=nn.Sequential(
  14. nn.Linear(num_prop_size,int(embedding_dimension/3)),
  15. nn.LeakyReLU()
  16. )
  17. self.linear_relu_cat_prop=nn.Sequential(
  18. nn.Linear(cat_prop_size,int(embedding_dimension/3)),
  19. nn.LeakyReLU()
  20. )
  21. self.linear_relu_input=nn.Sequential(
  22. nn.Linear(embedding_dimension,embedding_dimension),
  23. nn.LeakyReLU()
  24. )
  25. self.rgcn=RGCNConv(embedding_dimension,embedding_dimension,num_relations=2)
  26. self.linear_relu_output1=nn.Sequential(
  27. nn.Linear(embedding_dimension,embedding_dimension),
  28. nn.LeakyReLU()
  29. )
  30. self.linear_output2=nn.Linear(embedding_dimension,2)

这个过程中,通过self.dropot=dropout将数据封装在类中,调用时直接通过类BotRGCN进行调用

4. init函数(方法)的第一个参数必须是self(self为习惯用法,约定俗成的东西),后面的参数则可以自由定义,和定义函数没有任何区别;

5 在类中定义init()方法,方便创建实例的时候,给实例绑定上通用的属性,方便类中的方法(函数)的定义(不用重复传参数);

6. 获取类的属性

  1. class Rectangle():
  2. def __init__(self,a,b):
  3. self.a = a
  4. self.b = b
  5. def getPeri(self):
  6. return (self.a + self.b)*2
  7. rect = Rectangle(3,4)
  8. print(rect.__dict__) #获取类的属性情况

7 __init__()方法(函数)又被称为构造器(constructor)或构造函数

        用__init__()这个特殊的方法(函数)可以方便地自己对类的属性进行定义;

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

2 python类中的self

init(self,参数)和__init__(self)区别

1 两种类型的init定义方式如下:

  1. class Person:
  2. # def __init__(self):
  3. # self.name=None
  4. # self.gender=None
  5. # self.age=None
  6. def __init__(self,name,gender,age):
  7. self.name=name
  8. self.gender=gender
  9. self.age=age

        前者__init__()方法中只有self,但在方法的类部包含三个属性。而后者在定义方法的时候,直接给定三个参数(实例化类时传过来的)

2 两者的实例化方法如下:

  1. #person=Person()
  2. #person.name='lisa'
  3. #person.gender='female'
  4. #person.age=18
  5. person2=Person('lisi','male',20)

主要的区别在于:

前者定义类可以是一个空结构,当有输入进来的时候再添加相应的数据;

后者则必须传值,不予许为空值。

3 因为在定义类时,我们需要东西去指定这个类所创建的对象,这样才能调用一系列的方法。

        而在定义类时,我们是没有对象的,类都还在定义中哪里去创建对象,所以这时我们规定统一用一个self来指定类的实例,这样我们就才能定义一些类的方法

4 self只有在类的方法中才会有,独立的函数或方法是不必带有self的;

        self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数

5 self名称不是必须的,在python中self不是关键词,你可以定义成a或b或其它名字都可以

6 self指的是类实例对象本身(注意:不是类本身);

参考: Python中 __init__函数以及参数self怎么理解和使用? - 知乎

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/761946
推荐阅读
相关标签
  

闽ICP备14008679号