关于python中__init__方法理解

在理解__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}

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

 

posted @ 2020-04-28 11:34  超级奶爸丁先生  阅读(555)  评论(0编辑  收藏  举报