面向对象
- 概念
面向对象是一种编程思想,是对现实中的事物进行抽象的方式
详细解释见:百度百科 - 面向对象和面向过程区别
面向对象关注的是谁能完成工作
面向过程关注的是完成工作的步骤
类
- 概念
类是对现实生活中一类具有相同特征事物的抽象,实质是一种用户定义的引用数据类型。
事物有状态和行为,事物的状态对应类中的变量,事物的行为对应类中的方法。 - 类定义的语法格式
class 类名:
变量或方法
- 类名的命名规则
满足大驼峰命名法 - 类变量
①概念:类变量是定义在类中,不属于某个具体对象的特征,被所有对象共同使用
②定义和使用
# 定义
class 类名:
类变量名=值
# 赋值
类名.类变量名=值
# 取值
对象名=类名()
类名.类变量名 #推荐
对象名.类变量名 #不推荐
③注意事项
- 类变量推荐使用类名取值访问,也可以使用对象名取值访问
- 类变量是能通过类名修改;使用对象名调用类变量修改类变量的值时会创建新的对象独有变量;如果此对象具有同名对象变量,则修改对应变量值
- 类变量可以私有化
- 类方法
①概念:类方法是定义在类中,不属于某个具体对象的行为,被所有对象共同使用
②类方法的定义和使用
# 定义
class 类名:
@classmethod
def 类方法名(cls,形参1,形参2,……):
方法体
# 调用
对象名=类名()
类名.类方法名(实参1,实参2,……)
对象名.类方法名(实参1,实参2,……)
③注意事项
- 类方法中不允许使用实例变量和实例方法
- 类方法中允许使用类变量和类方法,通过第一个参数cls进行
- 实例方法中允许使用类变量和类方法
对象
- 概念
对象是类的具体表现形式 - 对象的创建
语法格式:对象名=类名()
# 举例
#创建类
class People:
age=18 #类变量
# 创建对象
people=People()
- 注意
一个类可以创建任意数量的对象
成员变量
- 概念
成员变量用于描述对象固有的属性或状态 - 成员变量的定义和使用
# 定义
class 类名:
def __init__(self):
self.变量名1=值1
self.变量名2=None
# 使用
对象名=类名()
print(对象名.变量名1) # 取值
对象名.变量名2=值 # 赋值
- 说明
- 公有变量在__init__方法(构造方法)中声明,每个对象都具有该变量
- self仅出现在成员方法中,指代执行该方法的对象
- 独有变量在创建对象后声明,只有当前对象具有此变量
- 定义对象的独有变量时,如果独有变量名与公有公有变量名相同,视为修改公有变量值;如果独有变量名与公有变量名不想同,视为定义新的独有属性
- None含义是为空,表示没有具体的数据
成员方法
- 概念
成员方法用于描述对象的固有行为 - 成员方法的定义和使用
格式一(无参方法):
# 定义
class 类名:
def 方法名(self):
方法体
# 使用
对象名=类名()
对象名.方法名()
格式二(有参方法):
# 定义
class 类名:
def 方法名(self,形参1,形参2,……):
方法体
# 使用
对象名=类名()
对象名.方法名(实参1,实参2,……)
举例:
class People:
def talk(self):
print("people can talk")
def eat(self,food):
print("people eat %s"%food)
people=People()
people.talk()
people.eat("rice")
__init__方法
- 作用:_init_方法,也称为构造方法,创建对象时为对象初始化成员变量
- 定义格式
# 格式一
def __init__(self):
self.变量名=值1
# 格式二
def __init__(self,形参1,形参2,……):
self.__属性名1 = 形参1
self.__属性名2 = 形参2
- 注意
- __init__方法在创建对象时被运行,无需手动调用即可执行
- __init__方法中如果有形参,在创建对象时需要传递对应的实参
- 在类中声明、定义的方法,执行时无需手工调用,自动执行的方法称为魔术方法
__str__方法
- 作用:_ str _方法是在使用print函数打印输出对象到屏幕时被调用的方法,用于返回对象的规范化字符串表现形式
- 定义格式
def __str__(self):
return 打印信息
静态方法
- 定义与调用
# 定义
class 类名:
@staticmethod
def 静态方法名(形参1,形参2,……):
方法体
# 调用
对象名=类名()
类名.静态方法名(实参1,实参2,……) #(推荐)
对象名.静态方法名(实参1,实参2,……) #(不推荐)
- 各种方法定义规则
- 只访问成员变量的方法,定义成实例方法
- 只访问类变量的方法,定义类方法
- 既访问成员变量也访问类变量的方法,定义成实例方法
- 既不访问成员变量,也不访问类变量,定义成静态方法
封装
- 作用:封装操作可以对受访问保护的成员进行功能开发控制,达到保护数据不被非法访问的目的
- 私有变量和方法答定义
# 私有变量
self.__属性名=值
# 私有方法
def __方法名(self,形参1,形参2,……):
方法体
- 标准封装语法格式
# 变量私有化格式
self.__属性名=值
# 提供公共访问器格式
def get_属性名(self):
return self.__属性名
# 提供公共修改器格式
def set_属性名(self,属性名x):
self.__属性名=属性名x
演示
- 定义类Phone
- 定义变量用于描述电量值
- 定义3个方法用于描述耗电操作
- 定义1个方法用于描述充电操作
- 运行程序,执行上述操作,观察结果