Python __init__ 理解

class Phone():
        
    def call(self):
        print("phone",self.price)

phone1 = Phone()
phone1.price = 1000
phone1.call()

phone2 = Phone()
phone2.call()

这样,在call方法里,无法保证每个对象都有price这个属性,会报错  AttributeError: 'Phone' object has no attribute 'price'

这时就用到__init__(),让每一个对象都有这些属性

class Phone():
    def __init__(self):
        self.brand = "xiaomi"
        self.price = 2999
    def call(self):
        print("phone",self.price)
phone1 = Phone()
phone1.price = 1000
phone1.call()

phone2 = Phone()
phone2.call()

phone 1000
phone 2999

 

在执行  phone1 = Phone()时会有4步:

  1. 找有没有一块空间是Phone,已经创建了Phone类,所以有这块空间
  2. 利用Phone类,向内存申请一块和Phone一样的空间
  3. 去Phone找有没有__init__,如果没有,则将开辟的空间给了对象名P
  4. 如果有__init__,则会进入__init__方法执行里面的动作,self传入的为开辟的地址,然后将内存地址赋值给对象P

画图理解为:

 

posted @ 2020-03-24 12:26  小娜子成长记  阅读(154)  评论(0编辑  收藏  举报