07-Python之面向对象编程(定义)
# 面向对象一些基本理解
- 面向对象编程(Object Oriented Programming, OOP),是一种程序设计思想。
- 主要针对大型软件设计而提出,使软件设计更加灵活。
- 支持代码复用和设计复用,使代码由更好的可读性和可扩展性。
- OO: 面向对象
- OOA:面向对象的分析
- OOD:面向对象的设计
- OOI:面向对象的实现
- OOP:面向对象的编程
- 面向对象的实现过程:OOA->OOD->OOI
- 类和对象的概念:
- 对象:具体的事物,单个个体,类中的一个实例
- 作为程序的基本单元,一个对象包含了数据和操作数据的函数。
- 类:抽象名词,代表一个集合,共性的事物
- 对相同类型的对象进行分类、抽象后,得出共同的特征而形成了类。
- 类跟对象的关系:
- 一个是抽象,代表的是一大类事物
- 一个具象,代表一类事物的某一个个体
# 类的定义
- 基本格式:
class ClassName(object):
属性...
方法...
......
- 定义一个类:
- 必须用class关键字
- 类由属性和方法构成,其他不允许出现
- 成员属性定义可以直接使用变量赋值,如果没有值,使用None
- 类的注释,方便理解类的作用,包括属性方法。
- 类的命名规则推荐:
- 遵守变量命名的规范
- 大驼峰(有一个或者多个单词构成,每个单词首字母大写,单词跟单词之间相连)
- 尽量避开跟系统命名相似的命名
- (object)表示类是从哪个类继承下来的,默认是object类.(可省略)
- 类当中基本的内容:
- 属性:
- 概念: 一个对象的特征(变量)
- 分类:
- 1.实例属性:
- 一般在构造函数__init__()中定义,定义和使用必须以self作为前缀
- 实例属性属于实例(对象),只能通过对象名访问。
- 2.类属性:
- 是指类中所有方法之外定义的数据成员,可以通过类名访问,也可以通过对象访问
- 分类:公有属性、保护属性、私有属性
- 方法:
- 概念:一个对象的行为,称为方法(函数)
- 分类:
- 1.实例方法
- 公有方法
- 通过对象名调用
- 私有方法
- 不能通过对象名直接调用,
- 只能在属于对象的方法中通过self调用或者在外部通过其他特殊方式调用
- 注意:
- 形参列表第一个参数都要定义且最好命名为self
- 默认第一个参数代表的是实例化的类对象的引用
- 需要实列化对象才能使用,使用过程中可能需要截至对象的其他对象的方法完成
- 调用方法:
- 标准调用(推荐使用)、类调用、间接调用
- 2.静态方法
- 使用staticmethod()内置函数。
- 默认第一个参数需要接收到一个类
- 调用:通过类名或对象名
- 不需要实例化,通过类直接访问,多个实例共享此静态方法
- 不能直接访问属于对象的成员,只能访问属于类的成员
- 3.类方法
- 一般将cls作为类方法的第一个参数名称,调用类方法时不需要为该参数传递值
- 可以通过类或者它的实例来调用
- 关于self:
- 类的所有实例方法都必须至少有一个名为self的参数,并且必须是方法的第一个形参。
- self 在对象的方法中表示当前对象本身。
- 如果通过对象调用第一个方法,那么该对象会自动传入到当前方法的第一个参数中
- self 不是关键字
- 只是一个普通的参数
- 理论上可以用任何一个普通变量代替
- 方法中有self 形参的方法称为非绑定的方法,
- 可以通过对象访问
- 没有self的是绑定类方法,只能通过类访问
- 使用类访问绑定类的方法时,如果类方法总中需要访问当前类的成员,可以通过__class__成员来访问
* 案例1.创建类
# 1.简单的定义(经典类) class Person: # 括号可以省略 pass # pass就是一个占位符,什么也不是 ######################################## # 2.创建包含属性的类 class Person: # 1.类属性 # 1.1公有属性 name = "xiaohei" # 1.2保护的属性 _sex = "boy" # 以一个"_"开头则表示是被保护的属性 # 1.3私有属性 __age = 3 # 以两下划线"__"开头的则表示是私有属性 # 2.实例属性 def __init__(self, c): # self形参不能缺少 self.master = "humance" self.aother = c self.other = '添加属性' print(c) ######################################## # 3.创建包含方法的类 class Person: # 类属性 name = "xiaobai" # 类方法 # 1.共有方法(实例方法) def eat(self, f): print(self, f) # 2.私有方法 def __siyoufangfa(self): print("这是一个私有方法", self) # 3.类方法 @classmethod def leifangfa(cls): print("这是一个类方法",cls) # 4.静态方法 @staticmethod def jingtaifangfa(): print("这是一个静态方法")