self

self
  Python中对于实例的处理有着其内部的自动化规则:
  1. 当开发者使用类创建实例时,在Python的内部实际上会调用__new__()来创建出一个类的实例,并返回此实例。实例创建完成后,会自动调用__init__()来对实例进行初始化。这里就有个一个问题,__new__()创建出来的实例是通过什么传递给__init__()的呢?答案是,通过__init__()参数列表中的第一个参数,通常命名为self(从语法上看可以使用其它名称,但self已经成为大家的共识,也很能表示此参数的意义)。
  2. 开发者通过实例调用类中的方法时,也会通过第一个参数self来接收实例。比较特殊的是:方法定义时需要形参self;开发者调用时无需传递实参;Python会自动将实例赋给形参self。
  下面的例子很好地验证了以上的规则:

# -*- coding: utf-8 -*-

class Student():
    '''
    定义一个学生类Student
    '''
    def __new__(cls, name, scope):
        print('Create and return a instance in __new__().')
        instance = super().__new__(cls) # 创建了类Student的实例
        
        return instance                 # 返回创建的实例
        
    def __init__(self, name, scope):    # __new__()创建并返回的实例通过形参self传递给__init__()
        print('Initialize instance in __init__().')
        self.name = name
        self.scope = scope
        
    def printInfo(self):                # 通过参数self接收实例
        print('name: ', self.name)
        print('scope: ', self.scope)
        
student = Student('Lucy', 85)         # 创建Student实例时,会自动调用方法__new__()和__init__()
student.printInfo()

上面的程序输出:

Create and return a instance in __new__().
Initialize instance in __init__().
name: Lucy
scope: 85