在看很多python代码中,都发现关于类的定义,很多都有_init_()
为什么??
初次理解,写上_init_()就是为了方便后面的创建实例的时候,给实例绑定上属性;也方便后续类中方法的定义。
简言之,就是方便我们后续代码的编写。
所以,应该学会掌握。
此处借鉴
1、不用init()方法定义类
定义一个矩形的类,目的是求周长和面积。
class Rectangle():
def getPeri(self,a,b): #定义获得“矩阵的周长”的方法
return (a + b)*2 #这个方法返回的结果
def getArea(self,a,b): #定义获得“矩阵的面积”的方法
return a*b
rect = Rectangle() #实例化对象
print(rect.getPeri(2,5)) #输出a=3,b=4的周长
print(rect.getArea(2,5)) #输出a=3,b=4的面积
print(rect.__dict__)
结果:
14
10
{}
在实例化对象的时候,rect = Rectangle()参数为空,没有指定a、b的值,只有在调用函数的时候才指定了,且类中定义的每个方法的参数都有a、b,会感觉很麻烦。
通过**print(rect.dict)**来看这个实例的属性,竟然是空的。定义了一个矩形,按理来说它的属性应该是它的长、宽。但是它竟然没有。
这就是没有定义init()的原因了。
算矩形的周长和面积,都只需要两个属性,长和宽,那思考,为什么不最开始的时候就定义,之后类里面的方法的定义的时候,就不用定义长和宽了。
2、用init()方法定义类
上述同样的例子,采用init()方法定义类,如下:
class Rectangle():
def __init__(self,a,b): #定义了init()方法,两个属性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(2,5) #实例化对象的时候,里面直接就写了a和B的值
print(rect.getPeri()) #调用方法的时候就不用输入a和b的值了
print(rect.getArea())
print(rect.__dict__) #输出实例的属性
得到结果:
14
10
{'a': 2, 'b': 5}
定义完init()后,
好处1:创建的每个实例都有自己的属性,而这个属性,其实就是_init_()定义好的。
比如:init() 定义了两个,则实例化的类就有两个。(init()里面是a.b,实例化后也是a,b)
init() 定义了三个,实例化的类就有三个属性。
好处2:方便直接调用类中的函数。