您的当前位置:首页正文

python类的定义——为什么都写了_init_()方法

2024-11-30 来源:个人技术集锦

在看很多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:方便直接调用类中的函数。

显示全文