最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • python里self是什么

    正文概述    2020-06-20   258

    python里self是什么

    首先我们要搞明白Python的类中为要什么要用到self这个单词呢,为什么不用"zhangsan"、"lisi"这样的名字呢,这可定有他的用意。查Google翻译解释:

    self
    名词的解释:自;自我;自己

    那么问题来了,这里的自己指代的到底是谁,下面听我详细分解。

    分析

    测试代码以一下这个代码及其它的扩充为基础,先贴代码,为了好理解,别说了半天不知道我在说什么。

    class A():
        def song(one):
            print(one)
        def sing(self,one):
            print(one)

    1、首先要搞清楚的一个问题 a=A()与a=A,这两个赋值之间的区别

    a=A()
    print(a)
    a=A
    print(a)
    print(A)
    结果如下:
    <__main__.A object at 0x0000020A69C81780>
    <class '__main__.A'>
    <class '__main__.A'>
    分析:
    a=A()  是有地址的,这说明他是一个实体,比如 int a  中的 a 一样
    a=A    是没有地址的,发现他和A打印的结果一毛一样,这说明他就是A,也就是一个类名,
    等价于上一句中 int a 中的 int       
    那么也就是说下面这两语句是等价的
    b=A()   与   b=a()
    ------------------------------------------------------------------------
    通过上面的分析,我们知道,a=A()相当于把 A 给实例化了,什么叫实例化呢,类比与 int a ,
    int 什么都不能做,即 int 不能被赋值,不能进行算术操作等等,但是 a 可以(其实这里的 A 与 int
    是一样的,追溯到C语言,类只不过是一种自定义的结构变量而已,只不过功能更加强大)。
    那具体怎么个实例发呢?

    2、self 到底指代的是谁

    class A():
        def song(one):
            print(one)
        def sing(self,one):
            print(one)
    a=A()
    A.sing(a,"hello")  #注意这条语句
    a.sing("hello")
    打印结果:
    hello
    hello
    -------------------------------
    A.sing("hello")
    错误信息:
    TypeError: sing() missing 1 required positional argument: 'one'
    提示没有给 one 赋值
    --------------------------------
    a.song("hello")
    错误信息:
    TypeError: song() takes 1 positional argument but 2 were given
    那么问题来了,多给了一个什么参数,为什么会多给呢?
    --------------------------------
    把类A改一下
    class A():
        def song(one,two):   #注意这里多给song了一个参数
            print(one)
    a.song("hello")   //这里的参数  "hello"赋给了 two
    print(a)
    打印结果:
    <__main__.A object at 0x0000020A69C39CC0>
    <__main__.A object at 0x0000020A69C39CC0>
    是不是很奇怪,为什么a.song("hello")返回的是  实例  a  的地址呢?

    从这个例子中你就可以发现,实际上 a.sing(“hello”) 等价于 A.sing(a,“hello”),而self就是实例 a 自己,而且你发现 self ,也可以用别的单词来代替。

    通过这段分析,我们简单的知道了,类中的方法第一个参数必须是 self ,不然实例无法正确调用类中的方法,也就是说,如果方法中第一个参数不是 self(广义的),那么这个方法是没有任何价值的,因为实例无法调用它,一个无法被调用的方法真不知道有什么用。

    参数前面的 self

    x=6
    class A():
        def sing(self):
            self.x=10
        def mutl(self):
            y=10*x
            print(y)
    a=A()  
    a.mutl()

    这里先猜一下结果,到底会打印 60 呢,还是 100 呢?要弄清这个问题,就要先弄清 mutl() 中的 x 到底是哪一个,先看结果在分析。

    结果是:60

    为什么不调用类内部的 x 参数而跑去调用类外的 x 呢?还是那个问题,self 到底指代的是谁,self 就是 a 本身,那么问题就很明显了,mutl() 方法中的 x 前面没有加 self 所以他调用的不是实例(注意这里说的是实例,而不是类)自身的参数。

    到这里我想你大概明白了,参数前面有self和没self的区别了,简单说,带self的参数是人家实例自身的,不带self的,爱谁谁,实例不管。


    起源地下载网 » python里self是什么

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元