Python基础(11)——面向对象基础

在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。

面向对象的三个基本特征是:封装、继承、多态。

封装

封装是实现面向对象程序设计的第一步,封装就是将数据或函数等集合在一个个的单元中(我们称之为类)。被封装的对象通常被称为抽象数据类型。 隐藏复杂的现实细节,暴露简单的调用接口。

封装的意义:封装的意义在于保护或者防止代码(数据)被我们无意中破坏。在面向对象程序设计中数据被看作是一个中心的元素并且和使用它的函数结合的很密切,从而保护它不被其它的函数意外的修改。

​ 1、保护数据成员,不让类以外的程序直接访问或修改,只能通过提供的公共的接口访问==>数据封装。

​ 2、方法的细节对用户是隐藏的,只要接口不变,内容的修改不会影响到外部的调用者==>方法封装。

​ 3、当对象含有完整的属性和与之对应的方法时称为封装。

​ 4、从对象外面不能直接访问对象的属性,只能通过和该属性对应的方法访问。

​ 5、对象的方法可以接收对象外面的消息。

继承

从已有的类创建新类的过程 提供继承信息的称为父类(超类/基类) 得到继承信息的称为子类(派生类)。继承主要实现重用代码,节省开发时间。

​ 1、在类名后边的括号里一般写的是基类的类名

​ 2、子类中继承自父类(基类),则父类的成员属性和成员方法都可以被子类所继承

​ 3、父类中私有的成员属性不能继承给子类的

多态

“一个接口,多种表现形式”。

同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

多态的三个条件:

​ 1、继承的存在(继承是多态的基础,没有继承就没有多态)

​ 2、子类重写父类的方法(多态下调用子类重写的方法)

​ 3、父类引用变量指向子类对象(子类到父类的类型转换)

数据抽象 一 找到和对象相关的数据——属性( 名词),可以使用包装器@property和修改器@属性.setter来装饰属性。

__slots__限定自定义类型的对象只能绑定某些属性,可以通过在类中定义__slots__变量来进行限定。需要注意的是__slots__的限定只对当前类的对象生效,对子类并不起任何作用。

1
2
3
class Person(object):
# 限定Person对象只能绑定_name, _age和_gender属性
__slots__ = ('_name', '_age', '_gender')

行为抽象 一 找到和对象相关的行为——方法(动词)

成员方法:第一个参数为self,由实例化的对象调用

类方法:使用@classmethod装饰的方法是类方法,与成员方法的区别在于所接收的第一个参数不是 self (类实例的指针),而是cls(当前类的具体类型)

静态方法:使用@staticmethod装饰的方法是类静态方法,其跟成员方法的区别是没有 self 参数,并且可以在类不进行实例化的情况下调用

魔法方法__init__()__del__()__str__()__repr__()