面向对象之__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

原文地址:https://www.cnblogs.com/featherwit/p/13288840.html