Python面向对象程序设计有感
有学到面对对象中的对象是指客观世界中存在的对象,世间万物全可以是对象。概括上说,面向对象技术是一种从组织结构上模拟客观世界的方法。我的主观感受上并没有很好的理解这种编程思想,也没有明确的感受到它与面向过程编程的区别,这或许是因为我才接触编程半年,在后续的学习中,我会继续探索。
1.面向对象概述
(1)对象
对象分为静态部分和动态部分,静态部分被称为“属性”指对象本身的属性,例如人的性别、身高,动态部分指对象的行为,例如人可以走路、跑步。
具有相同属性和行为的一类实体被称为类,类是封装对象的属性和行为的载体。我在之后的学习中明白类是极为重要的,不知道其他语言是不是也要类的概率……
面向对象程序设计有封装、继承和多态三大基本特征。区别如下:
特征
概念
作用
封装
指用类作为载体将对象的属性和行为封装起来
是面向对象程序设计的核心思维,保证了类内部数据的完整性
继承
子类复用父类的属性和行为的同时又有特有的属性和行为
是实现重复利用的重要手段
多态
将父类对象应用于子类的特征
子类继承父类的勇士,也具备自己的特征并且能够实现不用的效果
在后续的学习中,我初步了解了封装、继承以及多态的意思和效果,挺神奇的……
2.类的定义和使用
定义类需要使用关键字class(为什么是class?),语法是class classname:,接着是应用语法name = classname()创建类的实例。
Python创建类后,可以创建_ init ()方法,我学的书上说是类似于Java的构造方法,就称它为构造方法吧。这个构造方法必须创建第一个参数self,他是用于访问类中的属性和方法的且会自动传递实参,因此在创建实例时就不需要传递参数给self。但是为什么要定义一个构造方法呢?这是我困惑的地方。我了解到这个方法是为了让实例绑定属性的。
类的成员由实例方法和数据成员组成。实例方法简单说就是在类中定义一个函数,只不过这个函数的第一个参数必须是self。数据成员简单说就是在类中定义变量,它分为类属性和实例属性,类属性是指在类中函数外定义的变量,实例属性是指定义在类的函数中的变量。
最后则是类的访问限制,个人认为也算是封装能力的一点体现。我们可以通过在属性或者方法名前加入单下划线,如_foo;双下划线__,如__foo;或收尾双下划线,如__foo__。
类型
表示类型
作用
单下划线
表示保护类型
只允许类本身和子类进行访问
双下划线
表示私有类型
只允许定义该方法的类本身进行访问
首尾双下划线
表示定义特殊方法
不明
3.属性
除了上述的属性外,我们还能通过@propetry将一个方法转化成属性。可以使得这个属性能用于计算且可以直接通过方法名来访问方法。格式如下:
//@property
def name(self):
body
通过这个方法我们还可以为属性添加安全保护机制,即把属性设置为私有,实现访问限制。
4.继承
面对对象编程中,被继承的称为父类或者基类,新的类称为子类或者派生类,通过如下格式继承:
//class name(基类):
body
当使用继承时,如果基类中的某个方法不适用于子类,我们就需要对这个方法进行重写直到满足我们的要求。在子类中不会自动调用基类的构造方法,就需要在子类中使用super()函数调用基类的构造方法。
**总结:大致学习了Python面向对象编程章节,对面向对象编程的思维还是不够清晰。对于类中的某些函数或者定义,书上并没有给出说明,整体上掌握还有欠缺。建议多进行实战,加深对知识的理解和运用。最后,这个章节带给我的感觉是神奇且神秘的。