python中的self和__init__()

2022/4/21 1:12:37

本文主要是介绍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 Rectangle():
 2     def getPeri(self,a,b):
 3         return (a + b)*2
 4     def getArea(self,a,b):
 5         return a*b
 6 
 7 rect = Rectangle()
 8 print(rect.getPeri(3,4))
 9 print(rect.getArea(3,4))
10 print(rect.__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 最后部分。

 



这篇关于python中的self和__init__()的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程