首先我们要搞明白Python的类中为要什么要用到self这个单词呢,为什么不用"zhangsan"、"lisi"这样的名字呢,这肯定有他的用意。
self代表类的实例,而非类。
class Test: def prt(self): print(self) print(self.__class__) t = Test()t.prt()
执行结果如下:
<__main__.test><class></class></__main__.test>
从上面的例子中可以很明显的看出,self代表的是类的实例。而self.class则指向类。
立即学习“Python免费学习笔记(深入)”;
类中的方法第一个参数必须是 self ,不然实例无法正确调用类中的方法,也就是说,如果方法中第一个参数不是 self(广义的),那么这个方法是没有任何价值的,因为实例无法调用它,一个无法被调用的方法真不知道有什么用。
注意:把self换成this,结果也一样,但Python中最好用约定俗成的self。
在继承时,传入的是哪个实例,就是那个传入的实例,而不是指定义了self的类的实例。
class Parent: def pprt(self): print(self) class Child(Parent): def cprt(self): print(self)c = Child()c.cprt()c.pprt()p = Parent()p.pprt()
运行结果如下:
<__main__.child><__main__.child><__main__.parent></__main__.parent></__main__.child></__main__.child>
解释:
运行c.cprt()时应该没有理解问题,指的是Child类的实例。
但是在运行c.pprt()时,等同于Child.pprt(c),所以self指的依然是Child类的实例,由于self中没有定义pprt()方法,所以沿着继承树往上找,发现在父类Parent中定义了pprt()方法,所以就会成功调用
免责声明:本站内容仅用于学习参考,信息和图片素材来源于互联网,如内容侵权与违规,请联系我们进行删除,我们将在三个工作日内处理。联系邮箱:chuangshanghai#qq.com(把#换成@)