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

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

geerniya 2017-08-22 21:12:41

36244

收藏 188

分类专栏: python 文章标签: python

版权

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

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

class Rectangle():    def getPeri(self,a,b):        return (a + b)*2    def getArea(self,a,b):        return a*brect = Rectangle()print(rect.getPeri(3,4))print(rect.getArea(3,4))print(rect.__dict__)12345678910

得到结果:

1412{}123

从上例中可以看到,我们在类中并没有定义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.brect = Rectangle(3,4)print(rect.getPeri())print(rect.getArea())print(rect.__dict__)12345678910111213

得到结果:

1412{'a': 3, 'b': 4}123

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

上述两个程序的不同之处,还望像我一样的初学者细细体会。

(0)

相关推荐

  • 面向对象编程

    https://m.toutiao.com/is/JnNfhMM/ 面向对象编程(OOP)对于初学者来说可能是一个很难理解的概念.很多书籍都是从解释OOP开始,讨论三大术语:封装.继承和多态性,但是解 ...

  • 面向对象: 理解python类的单继承与多继承

    俗话说"龙生龙凤生凤老鼠的孩子会打洞",每种动物都有各自的特性,比如 老鼠会打洞 猫会爬树 鲨鱼会游泳 不同种类有不同的天性.而在程序员的思维中,动物是对象, 天性是这个类方法或者 ...

  • Python常用魔术方法

    什么是魔术方法? 在Python中,所有以双下划线__包起来的方法,统称为Magic Method(魔术方法),它是一种的特殊方法,普通方法需要调用,而魔术方法不需要调用就可以自动执行. 魔术方法在类 ...

  • 带薪玩一周游戏,还要涨工资

    来源:Python 技术「ID: pythonall」 带薪玩游戏,是多么开心的事情,我就找到了. 前段时间,公司接到一个模拟业务场景的项目,需要在图形界面上模拟业务场景,比如人跑动,拖拽物体等,从而 ...

  • 一分钟浏览(四)学习英语中的定语[定义]...

    一分钟浏览(四) 学习英语中的定语 [定义]:修饰名词或代词的成分. [记忆]:记住两个字"名"."代" [可以充当定语的有]:名词.物主代词.数词.现在分词. ...

  • Python | 有序序列中元素的查找问题解决方法

    问题描述示例:如何查找有序序列中某一的元素输入:[1,2,3,4,5,6,--,100]   61 #查找的元素输出:61解决方案查找元素.一般地,我们可以用for循环进行遍历,再用if语句进行查找. ...

  • Object类中的equals和hashCode方法

    无论何时这个equals方法被重写那么都是有必要去重写hashCode方法,这个是因为为了维持hashCode的一种约定,相同的对象必须要有相同的hashCode值. ---------------- ...

  • Python学习之路第二节Python语句缩进和注释(代码块以缩进开始以第一条未缩进的行结束缩进量取决于您但是在整个块中缩进量必须一致)

    (代码块以缩进开始以第一条未缩进的行结束缩进量取决于您但是在整个块中缩进量必须一致) Python语句 Python解释器可以执行的指令称为语句.例如,a = 1是一个赋值语句.if陈述,for陈述, ...

  • Python如何定义私有变量?Python学习!

    无论你学习的是Python.Java还是其他的编程语言,相信大家都听说过私有变量,因为私有变量是编程中必不可少的.那么你知道Python私有变量如何定义吗?跟着小编往下看. 与Java和C语言用pri ...

  • PHP中的MySQLi扩展学习(二)mysqli类的一些少见的属性方法

    PHP中的MySQLi扩展学习(二)mysqli类的一些少见的属性方法 虽说是少见的一些属性方法,但是可能还是有不少同学在日常的开发中使用过,这里只是学习了可能相对来说我们用得比较少的一些 mysql ...

  • 说说Python类中的self参数?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  • 说说Python中的__new__和__init__的区别?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  • 推荐几款Python编程类游戏,你还在担心学习编程枯燥问题?

    自学过编程的小伙伴都知道,在学习的过程中,不仅仅要记下很多的知识点,而且那些知识点,都是非常的干,很干,很干,没有一点乐趣的感觉..... 所以在很多人学习Python的人,也许他的基础知识还没有学好 ...