• 面向对象之__init__方法


    通过__dict__给对象添加属性

    class Student(object):
        stu_school = 'hnie'
    
    
    stu1_obj.stu_name = 'featherwit'  # stu1_obj.__dict__['stu_name'] = 'featherwit'
    stu1_obj.stu_age = 18  # stu1_obj.__dict__['stu_age'] = 18
    stu1_obj.stu_gender = 'male'  # stu1_obj.__dict__['stu_gender'] = 'male'
    
    print(stu1_obj.__dict__)

    这样给对象进行动态的赋值还是过于复杂, 并且从类的定义中知道类是一类具有相同属性和方法的集合, 如果这样动态的进行添加属性的话, 不符合类的定义, 需要将对象的相同属性定义在类中, 可以使用类的__init__方法

    通过__init__给对象初始化属性

    class Student(object):
    
        def __init__(self, name, age, gender):
            self.name = name
            self.age = age
            self.gender = gender

    这时候, 通过类实例化对象的操作为:

    stu1_obj = Student('featherwit', 18, 'male')  # Student.__init__(空对象, 'featherwit', 18, 'male')

    实例化的过程总共发生了三件事:
    1. 先产生了一个空对象

    2. 会自动调用类中的__init__方法, 然后将空对象以及调用类时括号内传入的参数一同传给__init__方法

    3. 返回初始化后的对象

    class Student(object):
        # 空对象, featherwit, 18, male
        def __init__(self, name, age, gender):
            self.name = name  # 空对象.name = featherwit
            self.age = age  # 空对象.age = 18
            self.gender = gender  # 空对象.gender = male
    
    
    stu1_obj = Student('featherwit', 18, 'male')  # Student.__init__(空对象, 'featherwit', 18, 'male')

    并且, 注意到__init__方法是没有返回值的, 没有返回值即返回的为None, 如果__init__返回的是其他的非空对象, 则会报错。

    总结

    1. __init__方法会在调用类时自动触发执行, 用来为对象初始化自己独有的数据

    2. __init__内应该存放的是为了对象初始化属性的功能, 但是也是可以存放任意其他代码的, 想要在类调用时就立即执行的代码都可以放在__init__方法内

    3. __init__方法必须返回None

  • 相关阅读:
    ucore lab4 内核线程管理 学习笔记
    谈谈博客三迁的经历
    ucore lab3 虚拟内存管理 学习笔记
    ucore lab2 物理内存管理 学习笔记
    ucore lab1 操作系统启动过程 学习笔记
    【VMware】在移动硬盘或U盘中安装便携linux系统
    借助ADB冻结与卸载Android系统应用(免ROOT)
    Windows下查找各类游戏存档路径
    QMetaObject::connectSlotsByName: No matching signal for XXX 原理探究
    将VScode添加至右键菜单
  • 原文地址:https://www.cnblogs.com/featherwit/p/13288840.html
Copyright © 2020-2023  润新知