python中的self和__init__()

一、self

直观理解:

如果不加self,表示是类的一个属性(可以通过"类名.变量名"的方式引用);加了self,表示类的实例的一个属性(可以通过"实例名.变量名"的方式引用)。如:

class Test(object):
  val = 100
  def __init__(self):
    self.val = 200

test = Test()
test.val   #输出200
Test.val   #输出100

也可以从以下多角度理解self:

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

2、self在定义类的方法时必须位于第一个参数;

3、self总是指向调用时的类的实例;

4、self就是本身的意思,为了便于程序的,就得在类这个调用多个函数中,先申明自己是谁,到底是self,还是self. 所以必须有参数;

5、在调用时不必传入相应的参数;

 

二、__init__()

每次实例化一个类时,都会先调用__init__()方法,相当于介绍你定义了个什么东西。

用__init__()方法定义了类,那么每个实例化后的对象就拥有自己的属性,可直接在实例化的时候指定参数,使用类的方法时,也不需要再去重复传参;而如果没有__init__(),直接用类的方法定义属性,则属性就属于类的,不属于对象自己的。并且在使用方法时需要指定参数。

 

geerniya有个解释特别好:

  1. 不用__init__()方法定义类

1 class Student:
2     def student_info(self,name,number):
3         print('name: {}, number: {}'.format(name,number))
4                 
5 student=Student()
6 student.student_info('zhang',34)
7 print(student.__dict__)

 

输出结果为:

name: zhang, number: 34
{}

虽然不用__init__()方法也能正常实现要求,但查看这个实例的属性竟然是空的。在实例化对象的时候,student=Student()的参数是空的,只有在调用函数的时候才指定,并且类中定义的方法都有参数,明显不是很便捷。

  1. 用__init__()方法定义类
class Student:
    def __init__(self,name,number):
        self.name=name
        self.number=number
        
    def student_info(self):
        print('name: {}, number: {}'.format(self.name,self.number))
        
student=Student('zhang',34)
student.student_info()
print(student.__dict__)

输出:

name: zhang, number: 34
{‘name’: ‘zhang’, ‘number’: 34}

  

三、init(self,参数)和 __init__(self) 的区别

这里可参考 https://blog.csdn.net/weixin_40650484/article/details/97391376 最后部分。

 

posted @ 2022-04-20 23:25  TanLer  阅读(479)  评论(0)    收藏  举报