Python要self的理由

Python要self的理由

Python的类的方法和普通的函数有一个很明显的区别,在类的方法必须有个额外的第一个参数 (self ),但在调用这个方法的时候不必为这个参数赋值 (显胜于隐 的引发)。Python的类的方法的这个特别的参数指代的是对象本身,而按照Python的惯例,它用self来表示。(当然我们也可以用其他任何名称来代替,只是规范和标准在那建议我们一致使用self)

为何Python给self赋值而你不必给self赋值?

例子说明:创建了一个类MyClass,实例化MyClass得到了MyObject这个对象,然后调用这个对象的方法MyObject.method(arg1,arg2) ,这个过程中,Python会自动转为Myclass.mehod(MyObject,arg1,arg2)

这就是Python的self的原理了。即使你的类的方法不需要任何参数,但还是得给这个方法定义一个self参数,虽然我们在实例化调用的时候不用理会这个参数不用给它赋值。

实例:

class Python:

def selfDemo(self):

print ‘Python,why self?‘

p = Python()

p.selfDemo()

输出:Python,why self?

把p.selfDemo()带个参数如:p.selfDemo(p),得到同样的输出结果

如果把self去掉的话,

class Python:

def selfDemo():

print ‘Python,why self?‘

p = Python()

p.selfDemo()

这样就报错了:TypeError: selfDemo() takes no arguments (1 given)

扩展

self在Python里不是关键字。self代表当前对象的地址。self能避免非限定调用造成的全局变量。

在Python3之后不知道将self隐了没?感觉在Python类里的方法都要带个self这样有点死板

首先明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的。self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。

self名称不是必须的,在python中self不是关键词,你可以定义成a或b或其它名字都可以,但是约定成俗,不要搞另类,大家会不明白的。下例中将self改为myname一样没有错误:

1 class Person:
2           def _init_(myname,name):
3                    myname.name=name
4           def sayhello(myname):
5                    print ‘My name is:‘,myname.name
6 p=Person(‘Bill‘)
7 print p

self指的是类实例对象本身(注意:不是类本身)。

1 class Person:
2          def _init_(self,name):
3                   self.name=name
4          def sayhello(self):
5                   print ‘My name is:‘,self.name
6 p=Person(‘Bill‘)
7 print p

在上述例子中,self指向Person的实例p。 为什么不是指向类本身呢,如下例子:

1 class Person:
2          def _init_(self,name):
3                   self.name=name
4          def sayhello(self):
5                   print ‘My name is:‘,self.name
6 p=Person(‘Bill‘)
7 p1 = Person(‘Apple‘)
8 print p
时间: 2024-08-06 03:20:52

Python要self的理由的相关文章

学Python的五个理由

python目前在开发市场上的热度,不言而喻.自学有一定难度,除开强大的意志力,还需要天分.天才毕竟是少数,其中一部分变成仲永,剩下的一部分在大师的指导下变成大神.如果选择培训,那么,在培训机构的选择上,应当着重注意的以下几点. 1.除开基本课程,你还能学到什么? 物有所值和物超所值.千锋秉承"用良心做教育"的理念,除开理论课程的学习,还有市场上一流企业的项目以锻炼学员的实战经验,报名就送价值500元的树莓派.学员学完课程后,知识方方面面,开发经验实实在在,绝对做到物超所值. 2.是否

你应该学习python的7个理由

Python 是一门更注重可读性和效率的语言,尤其是相较于 Java,PHP 以及 C++ 这样的语言,它的这两个优势让其在开发者中大受欢迎.诚然,它有点老了,但仍是80后啊 -- 至少没有 Cobol 或者 Fortran 那么老.而且,如果还能派上用场的话,为啥要折腾着改变它呢 (尤其在这个还有那么多方法可以提升它性能的时候)?实际上这要看你怎么看待它,生命线长本身就是件好事 -- 说明它稳定且可靠.如果你是像其他许多人一样都是从 Java,C 或者 Perl 开始进入职业生涯的,那么学习

你该学习 Python 的 7 个理由

Python是一门更注重可读性和效率的语言,尤其是相较于Java,PHP 以及 C++ 这样的语言,它的这两个优势让其在开发者中大受欢迎.诚然,它有点老了,但仍是80后啊 -- 至少没有 Cobol 或者 Fortran 那么老.而且,如果还能派上用场的话,为啥要折腾着改变它呢 (尤其在这个还有那么多方法可以提升它性能的时候)?实际上这要看你怎么看待它,生命线长本身就是件好事-- 说明它稳定且可靠.如果你是像其他许多人一样都是从 Java,C 或者 Perl 开始进入职业生涯的,那么学习Pyth

600多种编程语言为何选学Python?这几个理由足够了!

注: 看完这几个理由,建议新手入门买两本书 <零基础学Python>和<Python入门到实践> 自2016年Python取代Java成为高校中最受欢迎的语言,从那时起它受欢迎的程度就没有减退过. 随着新时代的到来,Python正在不断发展壮大.如果你阅读编程和技术新闻或博客文章,那么你可能已经发现了Python的兴起,已经是大势所趋! 但是,最大的问题是为什么应该学习Python? 对于初学者来说很简单,从Python开始是最好的选择.因为它易于学习,功能强大,足以构建Web应用

Python 语言规范

pychecker ? 对你的代码运行pychecker 定义: pychecker 是一个在Python 源代码中查找bug 的工具. 对于C 和C++这样的不那 么动态的(译者注: 原文是less dynamic)语言, 这些bug 通常由编译器来捕获. pychecker 和lint 类似. 由于Python 的动态特性, 有些警告可能不对. 不过伪告警 应该很少. 优点: 可以捕获容易忽视的错误, 例如输入错误, 使用未赋值的变量等. 缺点: pychecker 不完美. 要利用其优势,

Python基础05 缩进和选择

Python基础05 缩进和选择 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 缩进 Python最具特色的是用缩进来标明成块的代码.我下面以if选择结构来举例.if后面跟随条件,如果条件成立,则执行归属于if的一个代码块. 先看C语言的表达方式(注意,这是C,不是Python!) if ( i > 0 ) { x = 1; y = 2; } 如果i > 0的话,我们将进行括号中所包括的两个赋值操作.括号中包含的就是块操作

python学习笔记之-代码缩进

Python最具特色的是用缩进来标明成块的代码.我下面以if选择结构来举例.if后面跟随条件,如果条件成立,则执行归属于if的一个代码块. 先看C语言的表达方式(注意,这是C,不是Python!) if ( i > 0 ) { x = 1; y = 2; } 如果i > 0的话,我们将进行括号中所包括的两个赋值操作.括号中包含的就是块操作,它隶属于if. 在Python中,同样的目的,这段话是这样的 if i > 0: x = 1 y = 2 在Python中, 去掉了i > 0周

python基础05 缩进与选择

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 缩进 Python最具特色的是用缩进来标明成块的代码.我下面以if选择结构来举例.if后面跟随条件,如果条件成立,则执行归属于if的一个代码块. 先看C语言的表达方式(注意,这是C,不是Python!) if ( i > 0 ) { x = 1; y = 2; } 如果i > 0的话,我们将进行括号中所包括的两个赋值操作.括号中包含的就是块操作,它隶属于if. 在Python中

Python为什么要self

Python要self的理由 Python的类的方法和普通的函数有一个很明显的区别,在类的方法必须有个额外的第一个参数 (self ),但在调用这个方法的时候不必为这个参数赋值 (显胜于隐 的引发).Python的类的方法的这个特别的参数指代的是对象本身,而按照Python的惯例,它用self来表示.(当然我们也可以用其他任何名称来代替,只是规范和标准在那建议我们一致使用self) 为何Python给self赋值而你不必给self赋值? 例子说明:创建了一个类MyClass,实例化MyClass