Python类中self的作用

举例如下:

class Person:

    def setName(self,name):
        self.name = name
        self.inputname = name
        input1 = name
    
    def getName(self):
        return self.name
    
    def greet(self):
        print "Hello world! I'm %s ." % self.name

其中,self是对于对象自身的引用。

我们对比 self.inputnameinput1 这两个变量,都赋值为 name,那么这两个值有什么区别呢?

在这里,self 改变了变量的作用域。
不加 self 的变量是局部变量,作用域是当前函数;加了 self 的变量是实例变量,作用域是当前实例。

也就是,我们在外部将类 Person 实例化时,可以调用它的 inputname 变量,因为这个变量是实例变量,作用域当前实例,却调用不了 input1 变量,因为这个变量是局部变量,只能在setName 函数中使用。

self 是什么对象?

我们这里假设 lil = Person(),其中 lil 是 Person 类的一个实例。
当我们调用 lil 的 setName 和 getName 或 greet 方法时,lil 自动将自己作为第一个参数,传入函数中,因此形象的称为 self
所以 self 是一个实例,指的实例本身。

通过使用 self,我们可以在其成员方法中访问他们要对其特性进行操作的对象本身了。

换句话说

这样说很拗口,换句话说,我们通过使用 self,将 attribute 的作用域从当前函数 变成 当前实例,这样这个 attribute 就可以在整个实例中都有效。这样便于我们在不同的成员方法中对这个 attribute 进行操作。例如上面例子中的 self.name ,因为使用了 self,我们在 getName 和 greet 中均可以使用该实例变量。

而且,对于实例 lil,我们也可以直接调用 name 这个attribute,也就是 lil.name,是有效的。但是 lil.input1 是无效的,会提示“类里面没有这个属性”。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本章将会介绍 自动引用计数的工作机制自动引用计数实践类实例之间的循环强引用解决实例之间的循环强引用闭包引起的循环强...
    寒桥阅读 4,500评论 0 0
  • 86.复合 Cases 共享相同代码块的多个switch 分支 分支可以合并, 写在分支后用逗号分开。如果任何模式...
    无沣阅读 5,320评论 1 5
  • 7月22日早上四点多就爬起来,跟着爸爸妈妈一起去天河机场赶飞机。飞机是早上八点五十五,十点四十五到的广州,在广州白...
    小方_2d82阅读 1,724评论 3 1
  • 幸存偏差:你以为别人成功了,你也可以成功,其实你并不知道他经历了多少次失败 游泳选手身材错觉:你以为练游泳可以练出...
    请叫我李大侠阅读 2,732评论 0 0
  • 性子好急,真的好急,可是孩子在做不愿意做的事情的时候,总是拖,能拖一分钟都好,孩子的作业之前看了一遍又一遍,把他容...
    里娃阅读 1,162评论 0 0

友情链接更多精彩内容