Python中self的理解(二)

最近使用 python类进行编程,发现了一个有趣的东西——self。
然后我写了一个代码
  1. class url():
  2.     ...
  3.     ...
  4.     def portview():
  5.         ...
  6.         ...

  7. if __name__ == '__main__':
  8.     address = url()
  9.     address.portview()
类似这段代码,然后我运行python程序,就出现了下面错误:

为什么会出现 takes no arguments (1 given)  呢,问题就出现在 self。
我将上面代码的第四行
  1. def portview():
改为:
  1. def portview(self):
问题就解决了。
那么为什么要使用 self 呢?

python类的方法和普通的函数的一个最大的区别就是在类中的方法必须有一个额外的参数——self,而且是第一个参数。当然了,这个只是显式的表现出来,在调用的时候不必给这个参数进行赋值。
调用类方法的时候,他会默认给你的参数增加一个变量进行初始化self,这个是隐式的增加,就以我刚才的代码为例:
  1. address.portview()
会自动转换为:

  1. address.portview(url)

尽管你的类的方法不需要任何参数,但还是得给这个方法定义一个self参数,在调用的时候我们完全不用理会这个参数。
self代表当前对象的地址。self能避免非限定调用造成的全局变量。

你一定很奇怪Python如何给self赋值以及为何你不需要给它赋值。举一个例子会使此变得清晰。假如你有一个类称为MyClass和这个类的一个实例MyObject。当你调用这个对象的方法MyObject.method(arg1, arg2)的时候,这会由Python自动转为MyClass.method(MyObject, arg1, arg2)——这就是self的原理了。

这也意味着如果你有一个不需要参数的方法,你还是得给这个方法定义一个self参数。

给C++/Java/C#程序员的注释Python中的self等价于C++中的self指针和Java、C#中的this参考。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值