首页 / PYTHON / python中的self多余吗
python中的self多余吗
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python中的self多余吗,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1804字,纯文字阅读大概需要3分钟。
内容图文
self代表类的实例,而非类。先看一个例子:
class Test: def prt(self): print(self) print(self.__class__) t = Test() t.prt()
执行结果如下
<__main__.Test object at 0x000000000284E080> <class '__main__.Test'>
从上面的例子中可以很明显的看出,self代表的是类的实例。而self.class则指向类。
self可以不写吗
在Python的解释器内部,当我们调用t.prt()时,实际上Python解释成Test.prt(t),也就是说把self替换成类的实例。
把上面的t.prt()一行改写一下,运行后的实际结果完全相同。
实际上已经部分说明了self在定义时不可以省略
class Test: def prt(): print(self) t = Test() t.prt()
运行时提醒错误如下:prt在定义时没有参数,但是运行时强行传了一个参数。
由于上面解释过了t.prt()等同于Test.prt(t),所以程序提醒多传了一个参数t。
Traceback (most recent call last): File "h.py", line 6, in <module> t.prt() TypeError: prt() takes 0 positional arguments but 1 was given
如果定义和调用时均不传类实例是可以的,就是类方法。
class Test: def prt(): print(__class__) Test.prt()
运行结果如下
<class '__main__.Test'>
在继承时,传入的是哪个实例,就是那个传入的实例,而不是指定义了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 object at 0x0000000002A47080> <__main__.Child object at 0x0000000002A47080> <__main__.Parent object at 0x0000000002A47240>
解释:
运行c.cprt()时应该没有理解问题,指的是Child类的实例。
但是在运行c.pprt()时,等同于Child.pprt(c),所以self指的依然是Child类的实例,由于self中没有定义pprt()方法,
所以沿着继承树往上找,发现在父类Parent中定义了pprt()方法,所以就会成功调用。
总结
self在定义时需要定义,但是在调用时会自动传入。
self的名字并不是规定死的,但是最好还是按照约定是用self
self总是指调用时的类的实例。
以上就是python中的self多余吗的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是互联网集市为您收集整理的python中的self多余吗全部内容,希望文章能够帮你解决python中的self多余吗所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。