__init__() 构造方法以及self到底指什么
一、__init__是什么
首先,__init__()是一个构造函数,用于初始化实例对象,参数中除了self外,还可以自己定义一些参数。
实例:
1 # -*- coding: utf-8 -*-
2 """
3 @Time : 2023/3/3 19:09
4 @Auth : T
5 @File :init.py
6 @IDE :PyCharm
7 """
8
9
10 class Person(object):
11 """
12 新建一个名为Person的类
13 """
14
15 # 构造方法
16 def __init__(self, name, grade):
17 self.name = name
18 self.grade = grade
19 print("调用构造方法")
20
21 def say(self):
22 return "我叫%s, 我的语文成绩是%d分" % (self.name, self.grade)
23
24
25 if __name__ == "__main__":
26 student_1 = Person("小明", 90) # 实例化对象
27 print(student_1.say())
28 student_2 = Person("小红", 95)
29 print(student_2.say())
输出结果:
为什么会这样呢?其实是在创建student学生对象的时候,暗中调用了__init__()构造方法,输出了其中的结果。在构造方法中,有三个参数,分别是self,name,grade,但是我们在实际传参的过程中只传入了两个参数,可见,self这个变量是无需用户手动传送值的,解释器会自动帮我们给其传递实例。
二、self
在python的类中self代表实例本身,具体来说,是该实例的内存地址。
1 # -*- coding: utf-8 -*-
2 """
3 @Time : 2023/3/3 14:59
4 @Auth : T
5 @File :self的作用.py
6 @IDE :PyCharm
7 """
8
9
10 class Animal(object):
11 """
12 这是一个动物类,继承于object
13 """
14 def __init__(self, head, foot):
15 self.head = head
16 self.foot = foot
17 print("头的数量是:", self.head)
18 print("脚的数量是:", self.foot)
19 print("这是一个构造函数,用于初始化实例对象")
20
21 def eat(self, food):
22 return f"正在吃{food}"
23
24 def play(self):
25 return "正在玩耍"
26
27 def sleep(self):
28 return "正在睡觉"
29
30
31 if __name__ == "__main__":
32
33 # 方法一:先实例化对象,后利用对象调用类中的方法
34 chicken = Animal(1, 2) # 实例化对象
35
36 # 利用对象调用类中的方法
37 print("*" * 20, "利用实例化对象调用类中的方法", "*" * 20)
38 print(chicken) # <__main__.Animal object at 0x000001CF7AC9C400>
39 print(chicken.eat("rice")) # 正在吃rice
40 print(chicken.play()) # 正在玩耍
41 print(chicken.sleep()) # 正在睡觉
42
43 # 方法二:先实例化对象,后利用类名调用类中的方法
44 chicken = Animal(1, 2) # 实例化对象
45
46 # 利用类名调用方法
47 print("*" * 20, "利用类名调用方法", "*" * 20)
48 print(chicken) # <__main__.Animal object at 0x0000021DC410D4C0>
49 print(Animal.eat(chicken, "meat")) # 正在吃meat
50 print(Animal.play(chicken)) # 正在玩耍
51 print(Animal.sleep(chicken)) # 正在睡觉
输出结果:
分析:
以上述代码中,定义了一个类Animal,在这个类中,self为参数变量,实例化的过程中,python解释器自动调用__init__,该self可接收实例对象的内存地址,从而self代表了实例本身。从调用的两种方式也可以看出来。可见,对于实例化对象的这种方式,self这个变量是无需用户手动传送值的,解释器会自动帮我们给其传递实例。
三、参考资料
https://www.cnblogs.com/vincent-sh/p/12780716.html
https://blog.csdn.net/xrinosvip/article/details/89647884
https://www.bilibili.com/video/BV1rB4y1u7mT/?spm_id_from=333.337.search-card.all.click
https://zhuanlan.zhihu.com/p/95788606
-------------------------------------------
个性签名:纸上学来终觉浅,绝知此事要躬行。
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!