Python面向对象之self和init之解析

Python面向对象之self和__init__()之解析
一、Python面向对象之self

1. self是什么

       Python的self其实就相当于C++的this指针。如果把类比作是图纸,那么由类实例化后的对象才是真正可以住的房子。根据一张图纸可以设计出成千上万的房子,它们长得都差不多,但它们都有不同的主人。每个人都只能回自己的家里,陪伴自己的孩子。。。。。。所以self这里就相当于每个房子的门牌号,有了self,你就可以轻松找到自己的房子。
       Python的self参数就是用一个道理,由同一个类可以生成无数对象,当一个对象的方法被调用的时候,对象会将自身的引用作为第一个参数传给该方法,那么Python就知道需要操作哪个对象的方法了。如下面的例子:

class Ball:
    def setName(self, name):
        self.name = name
    def kick(self):
        print("我叫 %s, 嗷~谁踢我?!" %self.name)

a = Ball()
a.setName("飞火流星")
b = Ball()
b.setName("团队之星")
c = Ball()
c.setName("土豆")
a.kick()
b.kick()
c.kick()

2. self代表类的实例,而非类

       类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是self。

二、Python面向对象之__init__()

init()方法是构造方法

       类有一个名为init() 的特殊方法(构造方法),该方法在类实例化时会自动调用。由于类起到模板的作用,因此,可以在创建实例的时候,把我们认为必须绑定的属性强制填写进去。这里就用到Python当中的一个内置方法init方法,例如在Student类时,把name、score等属性绑上去:


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


student = Student("Hugh", 99)
student.name
student.score

       这里需要注意:(1) init方法的第一参数永远是self,表示创建的类实例本身,因此,在init方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。(2)有了init方法,在创建实例的时候,就不能传入空的参数了,必须传入与init方法匹配的参数,但self不需要传,Python解释器会自己把实例变量传进去:


   转载规则


《Python面向对象之self和init之解析》 赵小亮 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
C++之指针小结 C++之指针小结
C++之指针小结 1. 什么是vector?       向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的
2019-12-27
下一篇 
LeetCode第一题两数之和 LeetCode第一题两数之和
LeetCode第一题两数之和        给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但
2019-12-24
  目录