Python __init__ 和 self()的一点理解

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() 的一点体会,记录下来以供查阅。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值