Ⅰ 为什么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定义,但是调用的时候显示没有我我定义的参数,求大佬解答一下
你的init方法写错了
是双下划线
__init__
Ⅲ Python中self的使用
如果你学过C++或者java的话,self就同this指针,表示当前正在被调用的这个对象
Ⅳ Python的类中引用成员变量必须加self吗
Python的类中引用成员变量必须加self
类(class)初始化之后会得到实例(instance)。 self就是用于代表初始化的到的实例。 明确地写一个self参数,使得类的方法(method)和普通的函数(function)本质上没有差异,所有的输入参数都显示地传递到方法/函数当中。 当然作为类的方法,作用的对.
self是只有在类中才会有的。self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。 但self的名称并不是一定的,在python中self不是关键词。在初始化函数中可以把self换成任意名字.
Ⅳ 用python定义类的时候用self定义,但是调用的时候他显示没有我定义的参数,求各位大佬解答
你init里面试pos=t,但是你没有传进去t啊,改成self.pos=pos
Ⅵ python cls不能调用self的变量么
普通的方法,第一个参数需要是self,它表示一个具体的实例本身。
如果用了staticmethod,那么就可以无视这个self,而将这个方法当成一个普通的函数使用。
而对于classmethod,它的第一个参数不是self,是cls,它表示这个类本身。
>>> class A(object):
def foo1(self):
print "Hello",self
@staticmethod
def foo2():
print "hello"
@classmethod
def foo3(cls):
print "hello",cls
>>> a = A()
>>> a.foo1() #最常见的调用方式,但与下面的方式相同
Hello <__main__.A object at 0x9f6abec>
>>> A.foo1(a) #这里传入实例a,相当于普通方法的self
Hello <__main__.A object at 0x9f6abec>
>>> A.foo2() #这里,由于静态方法没有参数,故可以不传东西
hello
>>> A.foo3() #这里,由于是类方法,因此,它的第一个参数为类本身。
hello <class '__main__.A'>
>>> A #可以看到,直接输入A,与上面那种调用返回同样的信息。
<class '__main__.A'>
Ⅶ python类中self的问题
原因都出在第4行这句: test3.count += 1 #!!!注意此处不是self.count
你每运行一次 init() 函数 count 就会累加一
注意 你累加的是 test3.count 而不是 self.count
所以 运行了三次 init() 函数 的输出是 1 2 3
如果 你累加的是 self.count 就会输出三次 1 1 1
***首先要理解上面所说的 再继续看下面的***
既然如此 print(cc3.count,cc4.count) #返回2,2 就是正确的
cc3.count 指向的 test3().count 输出的是 2 没异议是吧
cc4.count 指向的也是 test3().count 为什么不是 2 都是同一个东西
print(cc3.count,cc4.count) #返回3,6
前面第一个3 就不用多说了
后面的第二个6 是因为你 cc4.count=6 这句指定了他是6
比如 a = 6 输出a会是什么? 当然是6啊
Ⅷ Python如何调用自定义类中的函数
你好:
你要在自定义的函数里面的第一个参数设置为:
self
这是python约定的;
调用的时候可以不用管它,它相当于this!
Ⅸ 关于Python中的self
python中的self就相当于c++中的this指针
也就是指向对象本身的指针
self.name
=
name
就是当前对象的成员变量name赋值为name。
Ⅹ 关于python类中函数名前加self.的问题
self是对实例自己的引用。
self.a()的意思是"调用自己的过程a"。
试想,有定义一个函数a,同时,类中也有过程a,要区分两者,在类中就要通过是否使用self前缀来区分,在外部就要通过是否有实例名来区分。
参考以下代码: