• python之self


    #!/usr/bin/env Python
    # coding=utf-8
    __metaclass__ = type
    class Person:
        def __init__(self, name):
            self.name = name
            print self #新增
            print type(self) #新增
    其它部分省略。当初始化的时候,就首先要运行构造函数,同时就打印新增的两条。结果是:
    <__main__.Person object at 0xb7282cec>
    <class '__main__.Person'>
    证实了推理。self 就是一个实例(准确说是实例的引用变量)。
    self 这个实例跟前面说的那个 girl 所引用的实例对象一样,也有属性。那么,接下来就规定其属性和属性对应的
    数据。上面代码中:
    self.name = name
    就是规定了 self 实例的一个属性,这个属性的名字也叫做 name,这个属性的值等于初始化函数的参数 name 所
    导入的数据。注意, self.name 中的 name 和初始化函数的参数name 没有任何关系,它们两个一样,只不
    过是一种起巧合(经常巧合,其实是为了省事和以后识别方便,故意让它们巧合。),或者说是写代码的人懒
    惰,不想另外取名字而已,无他。当然,如果写成self.xxxooo = name ,也是可以的。
    其实,从效果的角度来理解,这么理解更简化:类的实例 girl 对应着 self,girl 通过 self 导入实例属性的所有数
    据。
    当然,self 的属性数据,也不一定非得是由参数传入的,也可以在构造函数中自己设定。比如:
    #!/usr/bin/env Python
    #coding:utf-8
    __metaclass__ = type
    class Person:
        def __init__(self, name):
            self.name = name
            self.email = "qiwsir@gmail.com" #这个属性不是通过参数传入的
    info = Person("qiwsir") #换个字符串和实例化变量
    print "info.name=",info.name
    print "info.email=",info.email #info 通过 self 建立实例,并导入实例属性数据
    运行结果
    info.name= qiwsir
    info.email= qiwsir@gmail.com #打印结果
    通过这个例子,其实让我们拓展了对 self 的认识,也就是它不仅仅是为了在类内部传递参数导入的数据,还能在
    初始化函数中,通过self.attribute 的方式,规定 self 实例对象的属性,这个属性也是类实例化对象的属性,即
    做为类通过初始化函数初始化后所具有的属性。所以在实例 info 中,通过 info.email 同样能够得到该属性的数
    据。在这里,就可以把 self 形象地理解为“内外兼修”了。或者按照前面所提到的,将 info 和 self 对应起来,s
    elf 主内,info 主外。
    怎么样?是不是明白了类的奥妙?

  • 相关阅读:
    考研_数据结构
    快速排序模板
    nginx设置跳转https
    PHP 构造函数
    js scroll事件
    php获取url中的参数
    js 的cookie问题
    yii2关联表
    sql优化之concat/concat_ws/group_concat
    yii2.0 url美化-apache服务器
  • 原文地址:https://www.cnblogs.com/glxsc/p/5001031.html
Copyright © 2020-2023  润新知