Python在定义类方法时self的作用是什么?是否可以不写

今天在写代码的时候发现某个类的方法:def xx() 中没有加上self,运行后提示的错误很有意思,大意是提供了一个参数但却定义了0个参数。后来查了下资料大概了解了self的作用,下面一起来看看:

self的作用

不加self是本地变量,只在这个方法里有效;加self则是实例变量。因此,类里没有加self.的属性是全局的,所有的实例化出来的对象都访问到同一个

来看一个简单例子:

class A: 
    def fun(): 
        pass 
# 这种就是静态函数,一般用装饰器 @staticmethod 修饰 
class B: 
    def fun1(self): 
        pass 
# 这种就是成员函数,类实例可以直接调用 
@classmethod 
    def fun(): 
        pass 

# 这种是类函数,要求第一个参数表示类( cls )。也就是说,除了装饰器 @classmethod 外,还要求它的定义如 def fun(cls,...)。这是通过类直接调用的,如 A1.fun(...) 

那么,self可以不写吗

在Python的解释器内部,当我们调用X.fun()时,实际上Python解释成X.fun(self),也就是说把self替换成类的实例。有兴趣的可以把上面的一行改写一下,运行后的实际结果完全相同。实际上已经部分说明了self在定义时不可以省略,如果非要试一下,那么请看下面:


                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图灵的猫.

小二,给客官上酒!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值