首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

类class,方法,实例,指针self

慢更零基础 Python学习日记

感谢 @yang元祐 如何理解Python的类与对象?

感谢@王第铮 耐心用上帝造人的故事,讲明白了如何创建类,创建方法,并用self指针概念指向实例。

假设上帝想创造人类。他建立了一个人类模子,这个模子也就是人的模型。

class 人类模子

某一天,上帝想用这个模子生产人类,然后,他就用这个模子创造了亚当和夏娃。亚当和夏娃就是这个模子的实例,亚当和夏娃也是属于人类模子这个模型创造出来的的。(多数书籍用”蓝图“比做”类“)

亚当=人类模子;夏娃=人类模子

某一天,上帝想给亚当和夏娃做头发,于是就要用做头发这个功能,还好上帝很机智,设计人类模子的时候就预留了做头发功能,早已创建两个不同方法method。self . 剪发=剪x厘米;self . 染发=染成x色

亚当 . 剪发(剪10cm)

夏娃 . 染发(染成红色)

但是呢,在这个设计人类模子的时候,模子需要表明做头发这个功能是做“自己”的头发,那么怎么知道亚当剪亚当的,夏娃做夏娃的呢,设计模型的时候上帝也不知道是不是还有个 Tom 或者 Jerry 什么的,于是就用 self 来指代实例本身。所以在这个模子里面,做头发的功能(某个或几个方法Method)就写成self . 剪头 =剪x厘米;self . 染发=染成x色。

当夏娃去调用这个方法的时候,在模型内部,self就变成了夏娃,亚当调用self就变成亚当。

每次调用方法就修改了实例的属性,比如第一次调用亚当.剪头发(剪10cm),第二次再调用亚当.剪头发(剪10cm),此时亚当的头发就被剪短了20cm。至于为什么每次调用方法就修改了实例的属性?Python为什么这么设计,因为这是面向对象语言的设计思想,几乎所有面向对象的语言都是如此,而且,修改属性也是体现在实例之中。

(个人觉得上帝造人的故事更能明白这几个概念,之前老看“蓝图”的解释,看不太明白)

这里再放上《父与子的编程之旅》中的讲解类,方法,属性,实例的例子。

1.属性attribute是有关一个对象 objec t(实例 instance )“你所知道的信息”,属性是包含在对象/实例中的变量。

2.方法 method 是指可以对对象/实例做的动作,方法是包含在对象/实例中的函数。

3.如果烤第二根烤肠,需要先实例化第二个烤肠,一根烤肠不能被烤第二次。

4.self 指针就是一个代号,指向实体。

5.在 Python 和 Java 中,self 也不是指针了,就是实例 instance。但是说成指针比较好理解。指针和实例其实是一种东西,指针更能体现指向的意思。(@Chin Rowen指出第 5 条理解错误)

5.更正理解:Python 把一切数据,一切的一切都看作对象,在 Python中,没有变量,只有指针(不是指真的没有 variable,而是理解 Python语言为什么这么设计的话)。

赋值变量,并不是定义变量,而是定义指针,要说变量,也是指针变量。(还没读《 Python 学习手册》,未能深层次理解编程语言的设计逻辑,先挖坑吧。

慢更零基础 Python 学习日记

如果你看到这里,可以下方留言,

咱凑一个 Python 学习互相监督小组

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180502G1JKXC00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券