1.1什么是面向对象、
面向对象是一种变成思想,是一个通过多个对象互相协作完成功能处理流程的编程思路,在核心处理过程中,又主要区分为类的声明定义、对象的创建使用、面向对象拥有的特征【三大特征:封装、继承、多态】
1.2什么是类和对象
类:类型的简称,是数据类型的简称,是一种称呼、一个代码、一类事物的抽象出来的名称
对象:实体、物体
1.3类的声明语法和注意事项
类的声明语法:
class 类名【注意:类名首字母大写】:
“””注释”””
def __init__(self, name): name属性形式参数 可以有多个形参
self.name = name 类的属性
def 方法名(self):
“””类的方法”””
1.4对象的创建语法和注意事项
对象的创建
对象名 = 类名(类的各种属性实际参数) # 实际参数一定要按顺序写 实际参数要与形式参数个数一样
1.5对象的操作属性
对象名.name
1.6对象调用方法
对象名.方法名()
1.7类和对象的区别
类一个抽象的一种事物的总成
对象是一个具体实际存在的物体
体现的是对隐私数据/敏感数据的保护,不允许外界直接访问当前对象的属性数据,而是要通过提供的访问方法进行访问,在方法中添加限制访问条件。
2.1封装的操作步骤
(1). 将全部属性私有化【使用两个下划线开头,描述该属性是私有的,外界不能直接访问】
(2). 给每个属性,提供set/get访问方法
(3). 在访问方法中,就可以添加访问限制,保护数据安全
2.2封装的注意事项
封装后切记不要直接访问对象的属性
2.3封装后存在的问题和解决方案
误区1:什么样的属性应该封装?封装的话是不是一定要添加限制访问条件?
(1) 为了让定义的数据类型,能使用不同的应用场景,一帮情况下我们要对当前类型的所有属性进行封装处理。
(2) 封装属性之后,会提供访问属性数据的set/get方法,开发过程中方法中不需要添加任何限制条件,只是预留了可以添加限制条件的方法而已,后期根据项目需求进行限制条件的完善
误区2:私有属性,完全不能直接访问
我们定义了私有属性,就是两个下划线开头的属性
理论上外界不能直接访问,而是要通过我们提供的set/get方法间接访问
功能开发过程中,代码和功能都可能会存在一些问题
如果发现问题~一定要及时沟通,而不是私自修改。
3.1继承的基本语法
class 类型名称(要继承的类型):
pass
3.2继承的操作步骤
3.3继承中的方法重写什么意思?怎么操作?
子类中可以重新定义从父类中继承的方法【方法名称和方法参数一致】:方法重写
方法重写:子类中重写父类中已经存在的方法
在执行过程中~如果子类中重写了方法,执行子类的方法,如果没有重写则执行父类中的方法【运行过程中的多种状态切换:运行时多态】
3.4继承时从父类中默认继承了什么方法?
继承了父类的属性,和方法,私有方法不继承
3.5双下划线开头和结尾的方法:类型的魔法方法
__new__ 创建对象的方法 一般不使用~直接通过父类创建对象即可。
__init__ 初始化数据的方法 一般会重写该方法,用来初始化对象数据
__slots__ 封装时,限制属性的
__str__ 对象字符打印方式;默认情况打印内存中16进制表示的位置
__repr__ 交互模式中,字符打印方式
__hash__ 获取对象的hash数据,用于判断的依据
__ne__ 不等于:not equals;两个对象使用!=判断的
__ge__ 大于等于:grant or equals 判断 >=
__gt__ 大于: grant than判断 >
__le__ 小于等于:less or equals 判断 <=
__lt__ 小于 less than 判断 <
__eq__ 判断等于 equals 判断 ==
__dict__ 将对象转换成字典
__doc__ 说明文档
__class__ 类型,类似于type
3.6python中的多继承操作语法、
class 类名(类名1, 类名2, 类名3…)
3.7多继承的意义
一个对象在不同场景中,可能扮演不同的角色【设计时多态】
3.8多继承的方法查询顺序
python3中都是新式类:广度优先,从父类中查询对应的方法,查询到第一个满足的方法之后就直接返回
python2中的经典类:深度优先
4.1运行时多态
class Son:
def xiao_shun(self):
print("百善孝为先")
class Student:
def xue_xi(self):
print("好好学习,天天向上")
class Friend:
def play(self):
print("吃喝玩乐.....")
class Person(Son, Student, Friend):
"""人的类型:继承儿子、学生、朋友"""
pass
p = Person()
# 家庭环境
if isinstance(p, Son):
p.xiao_shun()
# 学习环境中
if isinstance(p, Student):
p.xue_xi()
# 朋友
if isinstance(p, Friend):
p.play()
def xue_tang(person):
# 作为一个学员,在教室要好好学习
if isinstance(person, Student):
# person.play()
person.xue_xi()
xue_tang(p)
4.2设计时多态
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def play(self):
if self.age <= 18:
print(“好好学习”)
elif 18 < self.age <=60:
print(“努力工作”)
else:
print(“颐养天年”)
多态~和封装以及继承不同的是,没有固定的语法,没有固定的思路,只有操作的方式。