Python旧版课程库
Python第 04 期 - 应用查看课程总览

101 面向对象 – self使用详解

主要内容

  • self用法
  • self详解
  • 1. self用法

    在定义类的过程中,无论是类的构造方法,还是类中的实例方法,都要求将 self 参数作为方法的第一个参数。 例如,定义一个 Person 类:
    
    class Person: #定义一个人类
    
        def __init__(self, name, age, weight): # __init__函数,实例化时为每个实例定制自己的属性
            self.name = name
            self.age = age
            self.weight = weight
    	
        def think(self, a, b):  #人都可以思考,该方法的第一个参数一定是self,表示自己的实例
            print(self.name, '在思考:', a,' + ',b,' = ',a+b) #通过self调用自己实例的属性
    
    Someone = Person('小杰', 18, 60)  #创建对象
    Someone.think(10,100)   #访问类对象的方法
    

    2. self详解

    self 参数的具体作用是同一个类可以产生多个对象。 当某个对象调用类方法时,该对象会把自身的引用作为第一个参数自动传给该方法。 换句话说,Python会自动绑定类方法的第一个参数指向调用该方法的对象。 如此,Python解释器就能知道到底要操作哪个对象的方法了。 例如,如下代码创建了名为 Person 的类,并对其进行了实例化:
    
    class Person: #定义一个人类
    
        def __init__(self, name): # __init__函数,实例化时为每个实例定制自己的属性
            self.name = name # 实例属性,表示定义的实例有自己的name
    
        def myself(self):
            print("this is my self:", self) 
    
    Someone_1 = Person(name="小杰")
    print("小杰: ", Someone_1)
    Someone_1.myself()
    
    print()
    
    Someone_2 = Person(name="大杰")
    print("大杰: ", Someone_2)
    Someone_2.myself()
    
    上面代码中,myself() 中的 self 代表该方法的调用者,即谁调用该方法,那么 self 就代表谁。 因此,该程序的运行结果为:
    
    小杰:  <__main__.Person object at 0x00000156A44D8400>
    this is my self: <__main__.Person object at 0x00000156A44D8400>
    
    大杰:  <__main__.Person object at 0x00000156A4517EE0>
    this is my self: <__main__.Person object at 0x00000156A4517EE0>
    

    3. 小结

    • 类中的实例属性和实例方法的第一个参数必须是self
    • self表征的是当前实例,这样类就能区分当前的实例的内容

    习题