转:python学习——类中为什么要定义__init__()方法

Posted 神不咙哚儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了转:python学习——类中为什么要定义__init__()方法相关的知识,希望对你有一定的参考价值。

学习Python的类,一直不太理解为什么一定要定义init()方法,现在简要谈一下自己的理解吧。

1、不用init()方法定义类
定义一个矩形的类,目的是求周长和面积。

 1 class Rectangle():
 2     def getPeri(self,a,b):
 3         return (a + b)*2
 4     def getArea(self,a,b):
 5         return a*b
 6 
 7 rect = Rectangle()
 8 print(rect.getPeri(3,4))
 9 print(rect.getArea(3,4))
10 print(rect.__dict__)

得到结果:

1 14
2 12
3 {}

从上例中可以看到,我们在类中并没有定义init()方法,但是也能够得到类似的要求,结果返回了矩形实例rect的周长及面积。
但是,我们通过print(rect.dict)来看这个实例的属性,竟然是空的,我定义了一个矩形,按理来说它的属性应该是它的长、宽。但是它竟然没有。这就是没有定义init()的原因了。
并且,在实例化对象的时候,rect = Rectangle()参数为空,没有指定a、b的值,只有在调用函数的时候才指定了。且类中定义的每个方法的参数都有a、b,这显然浪费感情,在类中直接指定方法就可以了。、

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

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

 1 class Rectangle():
 2     def __init__(self,a,b):
 3         self.a = a
 4         self.b = b
 5     def getPeri(self):
 6         return (self.a + self.b)*2
 7     def getArea(self):
 8         return self.a * self.b
 9 
10 rect = Rectangle(3,4)
11 print(rect.getPeri())
12 print(rect.getArea())
13 print(rect.__dict__)

得到结果:

1 14
2 12
3 {a: 3, b: 4}

定义完init()后,创建的每个实例都有自己的属性,也方便直接调用类中的函数。

上述两个程序的不同之处,还望像我一样的初学者细细体会。
---------------------
作者:geerniya
来源:CSDN
原文:https://blog.csdn.net/geerniya/article/details/77487941
版权声明:本文为博主原创文章,转载请附上博文链接!

以上是关于转:python学习——类中为什么要定义__init__()方法的主要内容,如果未能解决你的问题,请参考以下文章

21天学习python编程_ini文件与ConfigParser模块

python学习_day26_面向对象之封装

在类中定义多个构造函数

学习 Python 之 面向对象

学习 Python 之 面向对象

python cookbook第三版学习笔记十二:类和对象创建新的类或实例属性