Python 继承之 self的解释

本文详细探讨了Python中的self关键字,解释了self在类定义中的作用,以及为何在调用时不需要显式传递。通过实例展示了self如何指向类的实例,以及在继承、类方法和描述符类中的行为。同时,文章提到了面向对象编程中self的重要性,强调了正确封装和抽象的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚开始学习Python的类写法的时候觉得很是麻烦,为什么定义时需要而调用时又不需要,为什么不能内部简化从而减少我们敲击键盘的次数?你看完这篇文章后就会明白所有的疑问。

self代表类的实例,而非类。

实例来说明:


1
2
3
4
5
6
7
class Test:
   def prt( self ):
     print ( self )
     print ( self .__class__)
  
t = Test()
t.prt()

执行结果如下

?
1
2
<__main__.Test object at 0x000000000284E080>

<class '__main__.Test'>

从上面的例子中可以很明显的看出,self代表的是类的实例。而self.class则指向类。

self不必非写成self

有很多童鞋是先学习别的语言然后学习Python的,所以总觉得self怪怪的,想写成this,可以吗?

当然可以,还是把上面的代码改写一下。

?
1
2
3
4
5
6
7
class Test:
   def prt(this):
     print (this)
     print (this.__class__)
  
t = Test()
t.prt()

改成this后,运行结果完全一样。

当然,最好还是尊重约定俗成的习惯,使用self。

self可以不写吗

在Python的解释器内部,当我们调用t.prt()时,实际上Python解释成Test.prt(t),也就是说把self替换成类的实例。

有兴趣的童鞋可以把上面的t.prt()一行改写一下,运行后的实际结果完全相同。

实际上已经部分说明了self在定义时不可以省略,如果非要试一下,那么请看下面:

?
1
2
3
4
5
6
class Test:
   def prt():
     print
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值