Python中self的理解(二)
2016-09-19 22:35
323 查看
最近使用 python类进行编程,发现了一个有趣的东西——self。
然后我写了一个代码
class url():
...
...
def portview():
...
...
if __name__ == '__main__':
address = url()
address.portview()
类似这段代码,然后我运行python程序,就出现了下面错误:
为什么会出现 takes no arguments (1 given) 呢,问题就出现在
self。
我将上面代码的第四行
def portview():
改为:
def portview(self):
问题就解决了。
那么为什么要使用 self 呢?
python类的方法和普通的函数的一个最大的区别就是在类中的方法必须有一个额外的参数——self,而且是第一个参数。当然了,这个只是显式的表现出来,在调用的时候不必给这个参数进行赋值。
调用类方法的时候,他会默认给你的参数增加一个变量进行初始化self,这个是隐式的增加,就以我刚才的代码为例:
address.portview()
会自动转换为:
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参考。
然后我写了一个代码
class url():
...
...
def portview():
...
...
if __name__ == '__main__':
address = url()
address.portview()
类似这段代码,然后我运行python程序,就出现了下面错误:
为什么会出现 takes no arguments (1 given) 呢,问题就出现在
self。
我将上面代码的第四行
def portview():
改为:
def portview(self):
问题就解决了。
那么为什么要使用 self 呢?
python类的方法和普通的函数的一个最大的区别就是在类中的方法必须有一个额外的参数——self,而且是第一个参数。当然了,这个只是显式的表现出来,在调用的时候不必给这个参数进行赋值。
调用类方法的时候,他会默认给你的参数增加一个变量进行初始化self,这个是隐式的增加,就以我刚才的代码为例:
address.portview()
会自动转换为:
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参考。
相关文章推荐
- day14 python css position relative absolute
- python主函数
- day14 Python css Positon relative
- day17 Python Css 之Positon __absolute
- day14 Python css positon学习 之 fixed
- Python中self的理解(一)
- 328. Odd Even Linked List (python)
- day14 python css 漂浮的学习
- 148. Sort List (python)
- python read() readline() readlines() write() writelines()方法总结与区别
- 147. Insertion Sort List (python)
- 三.Python之循环
- day 14 Python Css padding
- python的高级特性
- 关于Python中的yield
- python标准库 循环器
- python logging模块使用
- 北理工本科生管理系统成绩查询爬虫
- python学习之 正则表达式
- Python程序员学习路线图