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

1、不用init()方法定义类

定义一个矩形的类,目的是求周长和面积。

1 classRectangle():2 defgetPeri(self,a,b):3 return (a + b)*2

4 defgetArea(self,a,b):5 return a*b6

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 classRectangle():2 def __init__(self,a,b):3 self.a =a4 self.b =b5 defgetPeri(self):6 return (self.a + self.b)*2

7 defgetArea(self):8 return self.a *self.b9

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__()_转:python学习——类中为什么要定义__init__()方法相关推荐

  1. python文本结构化处理_在Python中标记非结构化文本数据

    python文本结构化处理 Labelled data has been a crucial demand for supervised machine learning leading to a n ...

  2. python使用函数的目的_在Python 3.x中经常看到定义函数有一个单独的 * 参数?定义这样参数的目的是?怎样对其取值呢?...

    参数在python中总是通过赋值进行传递的.在默认情况下,参数是通过其位置进行匹配的,从左到右,而且必须精确的传递和函数头部参数名一样多的参数. 这种默认的传递方式很简单 def f(a,b,c): ...

  3. 在python中、实例变量在类的内部通过_【python】类变量、实例变量

    1.类变量.实例变量概念 类变量: 类变量就是定义在类中,但是在函数体之外的变量.通常不使用self.变量名赋值的变量.类变量通常不作为类的实例变量的,类变量对于所有实例化的对象中是公用的. 实例变量 ...

  4. python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态

    六.Python面向对象--类与对象\封装\继承\多态 1.什么是面向对象编程 1.1 程序设计的范式:程序可控,易于理解 1.2 抽象并建立对象模型 1.3 程序是不同对象相互调用的逻辑.每个对象在 ...

  5. python中面向对象_简述Python中的面向对象编程的概念

    面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机 ...

  6. python getattr调用自己模块_在Python中通过getattr获取对象引用的方法

    getattr函数 (1)使用 getattr 函数,可以得到一个直到运行时才知道名称的函数的引用. >>> li = ["Larry", "Curly ...

  7. python处理表格数据教程_用Python的pandas框架操作Excel文件中的数据教程

    引言 本文的目的,是向您展示如何使用pandas来执行一些常见的Excel任务.有些例子比较琐碎,但我觉得展示这些简单的东西与那些你可以在其他地方找到的复杂功能同等重要.作为额外的福利,我将会进行一些 ...

  8. python函数赋值给对象_【Python核心编程笔记】一、Python中一切皆对象

    Python中一切皆对象本章节首先对比静态语言以及动态语言,然后介绍 python 中最底层也是面向对象最重要的几个概念-object.type和class之间的关系,以此来引出在python如何做到 ...

  9. 基于python的语料库数据处理电子版_基于 Python 自然语言处理工具包在语料库研究中的运用...

    基于 Python 自然语言处理工具包在语料库研究中的运用 刘 旭 [摘 要] 摘要:国内当前以语料库为基础的研究,在研究工具方面,多以 AntConc . PowerGREP 为主,使用 Pytho ...

  10. python多维数据存储_在Python中存储和重新加载大型多维数据集

    我将运行大量的模拟,产生大量的数据,这些数据需要在以后存储和访问.我的模拟程序的输出数据被写入文本文件(每个模拟一个).我计划编写一个Python程序来读取这些文本文件,然后以更便于以后分析的格式存储 ...

最新文章

  1. 前端基础之JQuery
  2. ssh 连接ubuntu的虚拟机问题
  3. iframe的src怎么携带参数_Java 爬虫遇到需要登录的网站,该怎么办?
  4. Java黑皮书课后题第10章:**10.25(新的字符串split方法)String类中的split方法会返回一个字符串数组,该数组是由分隔符分隔开的子串构成的
  5. Android—设计模式原则及常见的设计模式
  6. 雨棚板弹性法计算简图_钢结构工程量计算、报价要点
  7. 时间管理,从洗碗开始
  8. 什么是 NIO? NIO 和 BIO、AIO 之间的区别是什么?NIO主要用来解决什么问题?
  9. 学习hadoop需要具备基础知识
  10. Springboot视图解析与模板引擎
  11. I - 免费馅饼-图画详细解析
  12. [PyTorch] autograd 自动求导
  13. Java对象锁和类锁全面解析(多线程synchronized关键字)
  14. 【百度之星程序设计大赛】2020年初赛第三场第四题Intersection
  15. 二:Unity 3D 脚本介绍
  16. 显卡性能测试软件的是,显卡性能测试软件
  17. Hive return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask.……table could not be cleaned up.
  18. vue 项目打包后可以改为动态配置域名地址
  19. RabbitMq消息队列进一步认识
  20. 如何看待人工智能的复杂性对于行业应用的影响

热门文章

  1. python语法参数_python默认参数语法
  2. Java语言概述及常用DOS命令
  3. 集合中的实体类根据一个字段合并_JAVA中序列化与反序列化
  4. 文档丨暴力破解性能问题
  5. 动手为王 | Oracle 数据库跨版本升级迁移实践
  6. Mysql读写锁保姆级图文教程
  7. 一大波人气博主袭来,现场直播华为全联接2020!
  8. 【华为云技术分享】《跟唐老师学习云网络》 - Bridge网桥
  9. 漫谈边缘计算(三):5G的好拍档
  10. 华为云数据库携新品惊艳亮相2019华为全联接大会