美文网首页
类的调用和self的理解

类的调用和self的理解

作者: 阿互 | 来源:发表于2019-10-31 15:17 被阅读0次
    类的调用.png

    调用的关键在第7行代码:my_computer = Computer()。这个过程叫作:类的实例化,即在某个类下创建一个实例对象。

    倒数第二行:my_computer.screen先是获取到类属性screen对应的值True,再用print()打印出来。

    最后一行:my_computer.start()调用方法start(),这个方法的功能是直接打印出'电脑正在开机中……'。

    细心的同学可能会有这样的疑惑:为什么实例调用方法时不用传参,定义时不是有个参数self吗?

    这就是参数self的特殊之处:在定义时不能丢,在调用时要忽略。至于它的作用,容我再卖个关子。

    正式揭秘特殊参数self的作用:self会接收实例化过程中传入的数据,当实例对象创建后,实例便会代替 self,在代码中运行。

    换言之,self 是所有实例的替身,

    如果要在类的外部调用类属性,我们得先创建一个实例,再用实例名.属性的格式调用吗?

    那么如果想在类的内部调用类属性,而实例又还没创建之前,我们就需要有个变量先代替实例接收数据,这个变量就是参数self。

    正确的写法是这样子的:(留意第六行)


    传参self2.png

    当最后一行代码运行时,实例person会像参数一样传给self,替换掉self,第六行的self.name等价于person.name

    person.name就相当于调用了类属性name(即'吴枫'),然后跑完整个方法。

    可见,self的作用相当于先给实例占了个位置,等到实例创建好就“功成身退,退位让贤”。

    同理,如果想在类的方法内部调用其他方法时,我们也需要用到self来代表实例。

    阅读代码后点击运行:(重点看第七行)


    传参self2.png

    当最后一行实例person调用say()方法时,便会执行say()内部的语句(第七行开始)。

    此时self.greeting()就变成person.greeting(),也就是调用实例方法greeting(),打印出'很高兴遇见你',再打印出'我来自中国'。

    综上,所以我们说self代表的是类的实例本身,方便数据的流转。对此,我们需要记住两点:

    第一点:只要在类中用def创建方法时,就必须把第一个参数位置留给 self,并在调用方法时忽略它(不用给self传参)。

    第二点:当在类的方法内部想调用类属性或其他方法时,就要采用self.属性名self.方法名的格式。

    相关文章

      网友评论

          本文标题:类的调用和self的理解

          本文链接:https://www.haomeiwen.com/subject/dcdtbctx.html