慢更零基础 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 学习互相监督小组
领取专属 10元无门槛券
私享最新 技术干货