Ⅰ 为什么python必须在方法定义和调用中显式使用“self”
为什么Python必须在方法定义和调用中显示使用“self”?
这个想法借鉴了 Mola-3 语言。出于多种原因它被证明是非常有用的。
首先,更明显的显示出,使用的是方法或实例属性而不是局部变量。
阅读self.x或self.meth()可以清楚地表明,即使您不知道类的定义,也会使用实例变量或方法。
在 C++ 中,可以通过缺少局部变量声明来判断(假设全局变量很少见或容易识别) —— 但是在 Python 中没有局部变量声明,所以必须查找类定义才能确定。
一些 C++ 和 java 编码标准要求实例属性具有m_前缀,因此这种显式性在这些语言中仍然有用。
其次,这意味着如果要显式引用或从特定类调用该方法,不需要特殊语法。
在 C++ 中,如果你想使用在派生类中重写基类中的方法,你必须使用::运算符 -- 在 Python 中你可以编写baseclass.methodname(self, <argumentlist>)。
这对于__init__()方法非常有用,特别是在派生类方法想要扩展同名的基类方法,而必须以某种方式调用基类方法时。
最后,它解决了变量赋值的语法问题:
为了 Python 中的局部变量(根据定义!)在函数体中赋值的那些变量(并且没有明确声明为全局)赋值,就必须以某种方式告诉解释器一个赋值是为了分配一个实例变量而不是一个局部变量,它最好是通过语法实现的(出于效率原因)。
C++ 通过声明来做到这一点,但是 Python 没有声明,仅仅为了这个目的而引入它们会很可惜。
使用显式的self.var很好地解决了这个问题。类似地,对于使用实例变量,必须编写self.var意味着对方法内部的非限定名称的引用不必搜索实例的目录。
换句话说,局部变量和实例变量存在于两个不同的命名空间中,您需要告诉 Python 使用哪个命名空间。
更多Python问答知识,请关注Python视频教程!!
Ⅱ python中的self是什么
class Name():
def __init__(self, name):
self.name = name
def say(self):
print 'Hello, %s' % self.name
如果不用self,那该怎么实现say(),非常难。
__inti__(self.name)叫做构造函数,凡是Name类的一个对象被创建,先运行构造函数,构造函数需要的参数就是类所需要的参数。 比如 a = Name('Ricky') 其实是 给__init__(self,name)提供参数。而self就说明是类的变量,类里别的函数也可以用的!
这是面向对象编程思路的一个瓶颈,希望你能弄懂。
Ⅲ python中self是什么
python中的self就相当于C++中的this指针
也就是指向对象本身的指针
self.name = name 就是当前对象的成员变量name赋值为name。
Ⅳ 我解释一下python的类方法为什么要写一个self参数
类(class)初始化之后会得到实例(instance)。
self就是用于代表初始化的到的实例。
明确地写一个self参数,使得类的方法(method)和普通的函数(function)本质上没有差异,所有的输入参数都显示地传递到方法/函数当中。
当然作为类的方法,作用的对象一定会是实例,因而在Python的设计之初,完全可以设计成self不作为一个参数,但是那样就需要一个关键字代表实例,比如在javascript中就是this。
然而Python的哲学是"Explicit
is
better
than
implicit.",显示要比隐示好,因此Python类的方法需要一个self参数代表实例是符合逻辑的。
Ⅳ 关于Python中的self
python中的self就相当于c++中的this指针
也就是指向对象本身的指针
self.name
=
name
就是当前对象的成员变量name赋值为name。
Ⅵ python中方法和函数的区别是什么什么时候要带self
定义一个函数就是定义一个方法,self是自身,调用的时候如果需要传入魔法方法__init__(初始定义的值【也就是参数】)时就需要带self,不需要则可以在函数(即方法)前加修饰@staticmethod,就不用带self参数了。
Ⅶ 关于python类中函数名前加self.的问题
self是对实例自己的引用。
self.a()的意思是"调用自己的过程a"。
试想,有定义一个函数a,同时,类中也有过程a,要区分两者,在类中就要通过是否使用self前缀来区分,在外部就要通过是否有实例名来区分。
参考以下代码:
Ⅷ python里的self是什么意思
self就是一个指针。透明的指向当前类的实例。
显示的将当前的类的实例进行传递。这就是python。不能用面向对象的理解去解释它。
Ⅸ Python为什么要self
晚上特别针对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能避免非限定调用造成的全局变量。
Ⅹ 为什么Python在类下定义函数要用self参数
一栋楼上所有房间都长的一毛一样,在楼外面,你能分清是哪个房间,可一旦进入楼里面,你就无法分清是304,还是406号房,而self就是这个门牌号。在程序中,它表明调用方法的对象是谁!