python class中为什么要有初始化init

  • 只有类才可以创建实例,变量是不能在函数之间进行相互传递的,需要给变量绑定上属性,通过变量的属性在各个函数之间相互传递。
  • init 函数里面的self 变量的作用就是为整个类提供一个全局变量,通过self这个全局变量绑定上属性,使得它能够在后面函数中使用。 定义完init()函数后,创建的每个实例都有自己的属性,也方便直接调用类中的函数。
  • 加上__init__()方法后,类才可以实例化,不加__init__()方法,类就是个空壳子,相当于一个方法的集合。

学习Python的类,一直不太理解为什么一定要定义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(3,4))
print(rect.getArea(3,4))
print(rect.__dict__)

输出结果:
在这里插入图片描述
从上例中可以看到,我们在类中并没有定义init()方法,但是也能够得到类似的要求,结果返回了矩形实例rect的周长及面积。

但是,我们通过print(rect.dict)来看这个实例的属性,竟然是空的,我定义了一个矩形,按理来说它的属性应该是它的长、宽。但是它竟然没有。这就是没有定义init()的原因了。

并且,在实例化对象的时候,rect = Rectangle()参数为空,没有指定a、b的值,只有在调用函数的时候才指定了。且类中定义的每个方法的参数都有a、b,这显然浪费感情,在类中直接指定方法就可以了。

因此吧,需要在类中定义init()方法,方便创建实例的时候,需要给实例绑定上属性,也方便类中的方法(函数)的定义。

2、用init()方法定义类

上述同样的例子,采用init()方法定义类,如下:

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__)

得到结果:
在这里插入图片描述
定义完init()后,创建的每个实例都有自己的属性,也方便直接调用类中的函数。
上述两个程序的不同之处,还望像我一样的初学者细细体会。

以上我归纳理解了一下,如有不对之处十分欢迎指正。
参考学习博文:

python class中为什么要有初始化init
python学习——类中为什么要定义__init__()方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值