__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

 

posted @ 2023-03-03 21:47  Kruskal  阅读(43)  评论(0编辑  收藏  举报