【扫盲】18.关于Python中为什么要有init()函数?
2019-09-17 本文已影响0人
Queenie的学习笔记
前言
对于一个Python初学者,关于Python中为什么要有init()函数这个问题甚是纠结,不明白这个函数的意义。技术的学习过程中,一旦有某个知识点吃不透,接下来的学习都是困难重重,好在网上资源丰富,只要能想到如何描述你的问题,一般都可以找到一些有助于理解的蛛丝马迹。建议初学者将代码复制粘贴放到自己电脑下的Python运行环境下去执行,观察两段代码的运行结果的区别。
示例来源: https://www.cnblogs.com/baxianhua/p/9996676.html,感谢作者
本示例用于演示Python中【不用init()方法定义类】代码运行结果会有何不同
- 两段代码的功能都是【打印出矩形的周长和面积、dict中的内容】
- 两段代码不同点在于:
代码一没有打印出dict的属性;
代码二实现了dict属性的输出- 结论:
① 通过print(rect.dict)来看实例的属性,代码一的结果是空的,按理来说它的属性应该是它的长、宽。但是它竟然没有,这就是没有定义init()的原因了;
② 在实例化对象的时候,rect = Rectangle()参数为空,没有指定a、b的值,只有在调用函数的时候才指定了,且类中定义的每个方法的参数都有a、b,这显然浪费感情,在类中直接指定方法就可以了;
③ 因此,需要在类中定义init()方法,方便创建实例的时候,需要给实例绑定上属性,也方便类中的方法(函数)的定义;
④ 定义完init()后,创建的每个实例都有自己的属性,也方便直接调用类中的函数。
代码一
print('代码一的运行结果:')
class Rectangle():
def getPeri(self,a,b):
return (a + b)*2
def getArea(self,a,b):
return a*b
rect = Rectangle()
print(rect.getPeri(3,4))
print(rect.getArea(3,4))
print(rect.__dict__)
print('\n')
代码二
print('代码二的运行结果:')
class Rectangle():
def __init__(self,a,b):
self.a = a
self.b = b
def getPeri(self):
return (self.a + self.b)*2
def getArea(self):
return self.a*self.b
rect = Rectangle(3,4)
print(rect.getPeri())
print(rect.getArea())
print(rect.__dict__)
print('\n')