面向对象的总结
面向对象
类:具有相同特征的一类事物(人、狗、老虎)
对象/实例:具体的某一个事物(隔壁阿花、楼下旺财)
实例化:类——>对象的过程
一、创建类与对象:
1)类就是一个模板,模板里可以包含多个函数,函数里实现一些功能
2)对象则是根据模板创建的实例,通过实例对象可以执行类中的函数
3)self参数
在Python中,在类中定义实例方法时将第一个参数定义为“self”只是一个习惯,而实际上类的实例方法中第一个参数的名字是可以变化的,而不必须使用“self”这个名字,尽管如此,建议编写代码时仍以self作为方法的第一个参数名字。
二、面向对象的三大特征
1、封装
就是将内容封装到某个地方,以后再去调用被封装在某处的内容。
2、继承
是基于抽象的结果,通过编程语言去实现它,肯定是先经历抽象这个过程,才能通过继承的方式去表达出抽象的结构。抽象只是分析和设计的过程中,一个动作或者说一种技巧,通过抽象可以得到类
将多个类共有方法提取到父类,子类仅需继承父类而不必一一实现每个方法
注:除了子类和父类的称谓,你可能看到过 派生类 和 基类 ,他们与子类和父类只是叫法不同而已。
3、多态
多态指的是一类事物有多种形态:动物有多种形态:人,狗,猪
Pyhon不支持Java和C#这一类强类型语言中多态的写法,但是原生多态,其Python崇尚“鸭子类型”。
Python崇尚鸭子类型,即‘如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子’ python程序员通常根据这种行为来编写程序。
例如,如果想编写现有对象的自定义版本,可以继承该对象 也可以创建一个外观和行为像,但与它无任何关系的全新对象,后者通常用于保存程序组件的松耦合度。
三、类的成员
类的成员可以分为三大类:字段、方法和属性类
1、方法
(1)方法包括:普通方法、静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同。
(2)普通方法:由对象调用;至少一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self;
(3)类方法:由类调用; 至少一个cls参数;执行类方法时,自动将调用该方法的类复制给cls;
(4)静态方法:由类调用;无默认参数;
(5)在类中定义的方法可以粗略分为四大类:公有方法、私有方法、静态方法和类方法。
公有方法、私有方法都属于对象,私有方法的名字以两个下划线“__”开始,每个对象都有自己的公有方法和私有方法,在这两类方法中可以访问属于类和对象的成员;
公有方法通过对象名直接调用,私有方法不能通过对象名直接调用,只能在属于对象的方法中通过self调用或在外部通过Python支持的特殊方式来调用。
如果通过类名来调用属于对象的公有方法,需要显式为该方法的self参数传递一个对象名,用来明确指定访问哪个对象的数据成员。
类成员的修饰符:
(1)公有成员,在任何地方都能访问
(2)私有成员,只有在类的内部才能方法
class C:
name = "公有静态字段“
__ name = "私有静态字段"
def __init__(self):
self.name = '公有字段'
self.__foo = "私有字段"
(3)在Python中,以下划线开头的变量名和方法名有特殊的含义,尤其是在类的定义中。用下划线作为变量名和方法名前缀和后缀来表示类的特殊成员:
_xxx:受保护成员,不能用'from module import *'导入;
__xxx__:系统定义的特殊成员;
__xxx:私有成员,只有类对象自己能访问,子类对象不能直接访问到这个成员,但在对象外部可以通过“对象名._类名__xxx”这样的特殊方式来访问。
注意:Python中不存在严格意义上的私有成员。
私有成员与公有成员
1)Python并没有对私有成员提供严格的访问保护机制。
在定义类的成员时,如果成员名以两个下划线“__”或更多下划线开头而不以两个或更多下划线结束则表示是私有成员。
私有成员在类的外部不能直接访问,需要通过调用对象的公开成员方法来访问,也可以通过Python支持的特殊方式来访问。
2)公开成员既可以在类的内部进行访问,也可以在外部程序中使用。
3)在IDLE环境中,在对象或类名后面加上一个圆点“.”,稍等一秒钟则会自动列出其所有公开成员,模块也具有同样的用法。
4)如果在圆点“.”后面再加一个下划线,则会列出该对象、类或模块的所有成员,包括私有成员。