• 面向对象之方法(init方法)


    方法

    种类:普通方法,类方法,静态方法,魔术方法

    1.普通方法格式:

    def 方法名(self[,参数,参数]):

      pass

     函数和方法的区别:

    类里面定义的就是方法,用法和函数是一模一样的

    单独定义的就是函数

     1 # 关于self
     2 class Phone:
     3     brand = 'huawei'
     4     type = 'mate 30'
     5 
     6     # Phone类里面的方法:call
     7     def call(self):
     8         print('self------->', self)
     9         print('正在打电话')
    10 
    11 
    12 phone1 = Phone()
    13 print(phone1, '------1------')
    14 phone1.call()

    可以看到 self就是当前phone1对象本身

     1 # 关于self
     2 class Phone:
     3     brand = 'huawei'
     4     type = 'mate 30'
     5 
     6     # Phone类里面的方法:call
     7     def call(self):
     8         print('self------->', self)
     9         print('正在打电话')
    10         print(self.note)
    11 
    12 
    13 phone1 = Phone()
    14 print(phone1, '------1------')
    15 phone1.note = "我是phone1的note"
    16 phone1.call()  # call(phone1) ----> self.note
    17 
    18 print("=" * 30)
    19 
    20 phone2 = Phone()
    21 print(phone2, '------2------')
    22 phone2.note = "我是phone2的note......"
    23 phone2.call()   # call(phone2) ----> self.note

     可以看到不同的对象调用call(),call中的self,就会变成相应的对象本身

    关于self的几点说明:

    (1)self在对象的方法中表示当前对象本身,如果通过对象调用一个方法,那么该对象会自动传入到当前方法的第一个参数

    (2)self并不是关键字,只是一个用于接受对象的普通参数,理论上可以用任何一个普通变量名代替

    (3)方法中有self形参

     

     2.init方法

     怎么解决这样的问题呢?保证每个self中都有这样的price

    首先来看这个语句p = Phone()执行背后的步骤:

    1.找有没有一块空间是Phone

    2.利用Phone类,向内存申请一块跟Phone一样的空间,如:0x78394NAB

    3.去Phone中找有没有__init__(),如果没有则执行将开辟内存给对象名:p

    4.如果有__init__,则会进入init方法,执行里面的动作,再之后,将内存地址赋值给对象p

     

     因此,每次创建对象的时候,系统会默认执行__init__()方法

     

     1 class Phone:
     2     # 系统的魔术方法之一,魔术方法的形式:__名字__()
     3     def __init__(self):  # init 初始的 初始化
     4         print("init------")
     5         self.brand = 'huawei'
     6         self.price = 4999
     7 
     8     def call(self):
     9         print('------->call')
    10         print('价格:', self.price)  # 不能保证每个self中都存在price
    11 
    12 
    13 p = Phone()  # 只要创建对象,系统会默认执行__init__()方法
    14 p.call()
    15 
    16 p1 = Phone()
    17 p1.call()

    输出:

     通过__init__()保证每一个类创建的对象中(模型造出来的空间)里面肯定有brand和price的两个属性

    注意:类中是没有这两个属性的

     

     

    因此,每次可以动态给对象添加属性

    如果我想改变brand,或者price属性的值,就可以直接p1.price = 5999,这样动态修改了

    3.给init方法中传参数

     

     

     1 class Person:
     2     name = '张三'
     3 
     4     def __init__(self, name, age):
     5         self.name = name
     6         self.age = age
     7 
     8     def eat(self, food):
     9         print('{}正在吃{}'.format(self.name, food))
    10 
    11 
    12 p = Person('李四', 14)
    13 p.eat('猪肉')

    输出:李四正在吃猪肉

  • 相关阅读:
    (Lineup the Dominoes筛子)三维状压
    Halloween Costumes 玄学题
    jQuery之动画
    javascript之位置
    javascript之事件
    jQuery之DOM
    jQuery之选择器
    jQuery简介
    javascript之Bom简介
    javascript之DOM操作
  • 原文地址:https://www.cnblogs.com/GumpYan/p/12354397.html
Copyright © 2020-2023  润新知