Python的面向对象编程
面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
参考连接
面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。
而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。
在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。
对象:类与实例
python中,一切皆对象,所以类和实例,本质也还是对象,被称为类对象和实例对象。
类对象(class)是用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。
实例对象(object)是指通过类定义的数据结构实例。python中的对象都会有三个特征: - 身份,即是存储地址,可以通过id()函数来查询。 - 类型,即对象所属的类型,可以用type()函数来查询。 - 值,都会有各自的数据,由魔法函数 __str__
决定,默认会输出引用的对象。
反过来说,实例就是对象在内存中开辟了空间。
父母口中的女朋友(对象),怀里搂着的她(实例)。
Python类方法、类属性、静态方法
实例方法 | 类方法 | 静态方法 | |
---|---|---|---|
定义 | 第一个参数必须是实例对象,该参数名一般约定为self ,通过它来传递实例的属性和方法 |
使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为 cls ,通过它来传递类的属性和方法 |
使用装饰器@staticmethod。参数随意,没有 self 和 cls 参数,但是方法体中不能使用类或实例的任何属性和方法 |
调用 | 只能由实例对象调用 | 实例对象和类对象都可以调用 | 实例对象和类对象都可以调用 |
属性及方法传递 | (也可以传类的属性和方法) | (不能传实例的属性和方法) |
代码演示
1 |
|
参考链接
菜鸟和大白谁厉害 - python中:类方法、静态方法、动态方法的理解
补充讨论:Self
和 cls
的 区别
从上面可以看出 - self总是指调用时的实例对象本身。 - cls总是指向类对象本身。
关于self还有其他要点 - self在定义时需要定义,但是在调用时会自动传入。 - self的名字并不是规定死的,但是最好还是按照约定是用self
self名称不是必须的,在python中self不是关键词,你可以定义成a或b或其它名字都可以,但是约定成俗(为了和其他编程语言统一,减少理解难度),不要搞另类,大家会不明白的。
下例中将self改为myname一样没有错误:
1 |
|
self指的是实例对象本身(注意:不是类本身,cls指向类对象本身)。
1 |
|
在上述例子中,self指向Person
的实例p
。 为什么不是指向类本身呢,如下例子:
1 |
|
如果self指向类本身,那么当有多个实例对象时,self指向哪一个呢?
转载链接
访问限制
继承和多态
抽象类和接口类
获取对象信息
实例属性和类属性
抽象类和接口类
使用__slots__
使用@property
多重继承
定制类
使用枚举类
使用元类
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!