在理解__init__方法之前,我们需要搞明白,什么时候才需要用到的这个方法

什么是__init__?

__init__方法在python中是类的初始化,通俗来讲,就是每次只要你去创建一个类的实例对象的时候,这个对象就会有初始化相关的属性

什么时候需要去定义__init__?

在我们构建的类的时候,可以看看这个属性或者这个参数,后面的每个方法都需要用到,如果是,那就需要__init__,例如我们定义logging类的时候,需要定义日志格式,输出级别。这些其实我们在开始的时候就定义好,然后其他方法直接去用就可以了,那这个时候,我们就需要用到__init__,再抽象出来,比如工厂现在需要制造一批红色铅笔,那我是直接在生产前,把颜色直接灌注到材料里面,还是先生产一个没有颜色的铅笔,然后再多一道工序刷上红色油漆,最终得到一个红色铅笔呢?很明显是,在生产前直接灌注对应的红色颜料到机器,这样只要启动按钮,生产出来的就是红色铅笔是不是很方便,在结合__init__,这个时候,我就在__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(3,4))

print(rect.getArea(3,4))

得到的结果是:14 12

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

但是,我定义了一个矩形,按理来说它的属性应该是它的长、宽。但是它竟然没有。这就是没有定义init()的原因了。

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

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

14 12 {'a': 3, 'b': 4}

从上面代码可以看出,我们只需要在创建对象的时候,传入对应的参数,这个类下面的所有方法都可以直接用,不需要再做一次传递参数

python中__init__方法_关于python中__init__方法理解相关推荐

  1. python 数据逐个验证_在python中验证数据的最佳方法是什么?

    我是Python的新手,我试图找到验证数据的最佳方法.在 我有一个"well"类型的对象,它具有其他对象的属性.也可以通过XML文件来获取数据.下面是一个例子.在class Wel ...

  2. python删除字符串中重复字符_从Python中删除字符串标点符号的最佳方法

    似乎有一个比以下更简单的方法: 1 2 3import string s ="string. With. Punctuation?" # Sample string out = s ...

  3. python写一个类方法_重写python脚本,在脚本的每个类中注入一个方法 - python

    假设我有一个python模块foo.py,其中包含: class Foo(object): def __init__(self): pass 接下来,我想解析此脚本,并在每个类中注入一个方法,然后将其 ...

  4. python中repr方法_(转)Python中的常见特殊方法—— repr方法

    在Python中有些方法名.属性名的前后都添加了双下划线,这种方法.属性通常都属于Python的特殊方法和特殊属性,开发者可以通过重写这些方法或者直接调用这些方法来实现特殊的功能.其实前面见过的构造方 ...

  5. python脚本怎么使用_在Python中使用next()方法操作文件的教程

    next()方法当一个文件被用作迭代器,典型例子是在一个循环中被使用,next()方法被反复调用.此方法返回下一个输入行,或引发StopIteration异常EOF时被命中. 与其它文件的方法,如Re ...

  6. python怎么更新数据库_在Python的Django框架中更新数据库数据的方法

    先使用一些关键参数创建对象实例,如下: >>> p = Publisher(name='Apress', ... address='2855 Telegraph Ave.', ... ...

  7. 如何找到python的安装路径_在cmd中查看python的安装路径方法

    我相信一定有很多的人跟我一样,经常忘记Python安装的路径,每当用到的时候,最笨的办法就是在全局电脑里,直接查找Python,这样是肯定能查到的,但是如果你的电脑文件超级多,这将是一个工厂量很大的事 ...

  8. python中tkinter模块_使用Python中的tkinter模块作图的方法

    python简述: Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.自从20世纪90年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和Web编程.Python[1 ...

  9. round在python是什么意思_细说python中的round()方法

    本篇文章,想聊一下Python中的round()方法. 这时候,有人就会说,round()方法嘛!简单!round() 方法就是返回浮点数x的四舍五入值. 你看下面这些例子: round(100.12 ...

  10. python输出列表元素_在Python中分别打印列表中的每一个元素方法

    在Python中分别打印列表中的每一个元素方法 更新时间:2018年11月07日 15:12:03 作者:wintersshi 今天小编就为大家分享一篇在Python中分别打印列表中的每一个元素方法, ...

最新文章

  1. 爬取猫眼怦然心动电影评论
  2. 某系统响应时间慢TPS低性能瓶颈调优过程
  3. linux设备驱动程序jd,Linux设备驱动程序学习(基于2440的GPIO字符设备驱动)
  4. sys接口linux编程,网络编程常用接口的内核实现----sys_listen()
  5. SAP Connect对inbound邮件接收问题的处理和调试环境搭建
  6. 三行情书代码_用三行代码优化您的交易策略
  7. 物资管理系统c语言课程设计,C语言实现仓库物资管理系统
  8. [算法]-排序算法之希尔排序
  9. 阿里云 linux mysql数据库_Linux Mysql数据库安全配置
  10. Name Disambiguaiton in Aminer论文解读
  11. talib python文档_TALib中文文档代码实现
  12. springboot集成梦网云科技api发送短信
  13. 评课用计算器计算机,《巧用计算器》评课稿
  14. Base64,Base32,Base16进制的区别:
  15. 文件分割方式 模仿hadoop手写一个工作原理 模仿hadoop filesplit任意切片
  16. 恶意代码分析实战——反汇编
  17. 音视频技术开发周刊 | 164
  18. Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
  19. 2020-12-07 Git 解决 git cherry-pick could not apply
  20. IE浏览器下载文本文件(txt,csv等)

热门文章

  1. Java LocalDateTime类| 带示例的getMinute()方法
  2. c# datetime._C#| 带示例的DateTime.DayOfWeek属性
  3. synchronized 加锁 this 和 class 的区别!
  4. MySQL 常见的开放性问题
  5. 第 6-4 课:MyBatis 核心和面试题(上)
  6. 想快速拥有个人网站?来试试这个...
  7. webstorm使用技巧
  8. QT5动态创建多个按钮控件并关联信号槽函数
  9. JS判断一个数字是否为小数
  10. LeetCode450题—— 删除二叉搜索树中的节点