Python _init_ 和 self()的一点理解
刚入门python,一直不理解类中的 init() 的用法,以及self的作用。这次终于弄清楚了一些,这里作一点记录:
self,英文单词意思很明显,表示自己,本身。
此处有几种潜在含义:
1.这里的自己,指的是,实例Instance本身。
2.同时, 由于说到“自己”这个词,都是和相对而言的“其他”而说的。
而此处的其他,指的是,类Class,和其他变量,比如局部变量,全局变量等。
此处的self,是个对象,Object。
是当前类的实例。
例如有一个 Person 的类class, 具体实例 instance 可能是一个具体对象 ‘Anny’, 因此:
Person.name = ‘Anny’
Person.gender = ‘female’
该类如果有函数,可以通过 def personfunction() 来定义。
在类的代码(函数)中,需要访问当前的实例中的变量和函数的,即,访问 Person 中的:
对应的变量(property):Person.name ,去读取之前的值和写入新的值
调用对应函数(function):Person.printit ,即执行对应的动作
-> 而需要访问实例的变量和调用实例的函数,当然需要对应的实例Instance对象本身
-> 而Python中就规定好了,函数的第一个参数,就必须是实例对象本身,并且建议,约定俗成,把其名字写为self
-> 所以,我们需要self(需要用到self)
而如果去掉self后,那种写法所使用到的变量,就不是真正的实例中的变量和函数,而是的访问到了其他部分的变量和函数了。
甚至会由于没有合适的初始化实例变量,而导致后续无法访问的错误。
下面是一个代码例子:
#Python
class Lover:
name1 = '?'
def __init__(self, charname):
self.name = charname
def printlover(self):
print ('My only lover is %s' %(self.name))
print ('Her name is %s' %(Lover.name1))
def selfdemo():
lovingu = Lover('anny')
lovingu.printlover()
if __name__ == "__main__":
selfdemo();
这里在 Lover 的类中,定义了参数 name 。但要注意在 init( ) 时,要加 self.name ,而不能直接定义 name, 否则就不是具体指向实例的参数,而是 Lover 类中的局部变量了(例如一开始定义的 name1,就是Lover类中的局部变量。)
Python中为何要有init
我的理解是,init的出现,主要有两方面的作用:
支持带参数的类的初始化实现类本身相关内容的初始化
当一个Class,稍微复杂一点的时候,或者内部函数需要用得到的时候,往往都需要在,别人实例化你这个类之前,使用你这个类之前,做一些基本的,与自己的类有关的,初始化方面的工作。
而这部分工作,往往就放到init函数中去了。
实现类本身相关内容的初始化
当一个Class,稍微复杂一点的时候,或者内部函数需要用得到的时候,往往都需要在,别人实例化你这个类之前,使用你这个类之前,做一些基本的,与自己的类有关的,初始化方面的工作。
而这部分工作,往往就放到init函数中去了。
以上就是自己关于 init() 的一点体会,记录下来以供查阅。