手机版网站怎么做的,什么网站是做汽车装饰配件的,恒大地产,企业管理软件管理系统牛面向对象 1. 概述1.1面向过程1.2 面向对象 2. 类和对象2.1 语法2.1.1 定义类2.1.2 实例化对象 2.2 实例成员2.2.1 实例变量2.2.2 实例方法2.2.3 跨类调用 3. 三大特征3.1 封装3.1.1 数据角度3.1.2 行为角度3.1.3 案例:信息管理系统3.1.3.1 需求3.1.3.2 分析3.1.3.3 设计 3.2 继… 面向对象 1. 概述1.1面向过程1.2 面向对象 2. 类和对象2.1 语法2.1.1 定义类2.1.2 实例化对象 2.2 实例成员2.2.1 实例变量2.2.2 实例方法2.2.3 跨类调用 3. 三大特征3.1 封装3.1.1 数据角度3.1.2 行为角度3.1.3 案例:信息管理系统3.1.3.1 需求3.1.3.2 分析3.1.3.3 设计 3.2 继承3.2.1 继承方法3.2.2 内置函数3.2.4 定义 3.3 多态3.3.1 定义3.3.2 重写3.3.3 重写内置函数 1. 概述
1.1面向过程
(1) 定义分析出解决问题的步骤然后逐步实现。 (2) 案例
dict_bjlz {
name: 八角笼中, type: 剧情, index: 690761
}
dict_fs {
name: 封神第一部, type: 奇幻, index: 532622
}
print(%s电影类型是%s,指数%s. %
(dict_bjlz[name],dict_bjlz[type],dict_bjlz[index]))
print(%s电影类型是%s,指数%s. %
(dict_fs[name],dict_fs[type],dict_fs[index]))(3) 优点简单直观适合顺序按步骤执行的任务 (4) 缺点所有字典都要重复定义键,数据与算法分离不易扩展
1.2 面向对象
(1) 定义可以使用类将变量与函数组合成新的数据类型 (2)案例
class Movie:def __init__(self, name, type, index):self.name nameself.type typeself.index indexdef display(self):print(%s电影的类型是%s,指数是%s. % (self.name, self.type, self.index))bjlz Movie(八角笼中,剧情,690761)
fs Movie(封神第一部,奇幻,532622)
bjlz.display()
fs.display()(3) 优点将每个字典相同的键统一定义在类中,将数据与对应的操作组合在一起扩展性强 (4) 缺点学习曲线陡峭
2. 类和对象
2.1 语法
2.1.1 定义类 (1) 代码
class 类名:文档说明def __init__(self,参数):self.实例变量 参数def 实例方法(self,参数):pass(2) 说明 – 类名所有单词首字母大写. – init 也叫构造函数创建对象时被调用也可以省略。 – self 变量绑定的是被创建的对象名称可以随意。
2.1.2 实例化对象 (1) 代码
对象名 类名(数据)(2) 说明 – 对象名存储的是实例化后的对象地址 – 类名后面的参数按照构造函数的形参传递
2.2 实例成员
2.2.1 实例变量
(1) 语法 a. 定义对象.变量名 b. 调用对象.变量名 (2) 说明 a. 首次通过对象赋值为创建再次赋值为修改.
class Movie:passmovie Movie()
movie.name 八角笼中
movie.name 封神第一部b. 通常在构造函数(_init)中创建
class Movie:def __init__(self, name, type, index):self.name namemovie Movie(八角笼中)
print(movie.name)(3) 每个对象存储一份通过对象地址访问 (4) 作用描述某个对象的数据。 (5) dict对象的属性用于存储自身实例变量的字典。
2.2.2 实例方法
(1) 定义
def 方法名称(self, 参数):方法体(2) 调用
对象.方法名称(参数)
# 不建议通过类名访问实例方法(3) 说明 – 至少有一个形参第一个参数绑定调用这个方法的对象,一般命名为self。 – 无论创建多少对象方法只有一份并且被所有对象共享。 (4) 作用表示对象行为。
2.2.3 跨类调用
# 写法1直接创建对象
# 语义老张每次创建一辆新车去
class Person:def __init__(self, name):self.name namedef go_to(self,position):print(去,position)car Car()car.run()class Car:def run(self):print(跑喽)lz Person(老张)
lz.go_to(东北)# 写法2在构造函数中创建对象
# 语义老张开自己的车去
class Person:def __init__(self, name):self.name nameself.car Car()def go_to(self,position):print(去,position)self.car.run()class Car:def run(self):print(跑喽)lz Person(老张)
lz.go_to(东北)# 方式3通过参数传递
# 语义老张用交通工具去
class Person:def __init__(self, name):self.name namedef go_to(self,vehicle,position):print(去,position)vehicle.run()class Car:def run(self):print(跑喽)lz Person(老张)
benz Car()
lz.go_to(benz,东北)3. 三大特征
3.1 封装
3.1.1 数据角度
(1) 定义将一些基本数据类型复合成一个自定义类型。 (2) 优势 – 将数据与对数据的操作相关联。 – 代码可读性更高类是对象的模板。
3.1.2 行为角度
(1) 定义 向类外提供必要的功能隐藏实现的细节。 (2) 优势 简化编程使用者不必了解具体的实现细节只需要调用对外提供的功能。 (3) 私有成员 – 作用无需向类外提供的成员可以通过私有化进行屏蔽。 – 做法命名使用双下划线开头。 – 本质障眼法实际也可以访问。 私有成员的名称被修改为类名_成员名可以通过__dict__属性查看。 – 演示
class MyClass:def __init__(self, data):self.__data datadef __func01(self):print(func01执行了)m01 MyClass(10)
# print(m01.__data) # 无法访问
print(m01._MyClass__data)
print(m01.__dict__) # {_MyClass__data: 10}
# m01.__func01() # 无法访问
m01._MyClass__func01()3.1.3 案例:信息管理系统
3.1.3.1 需求
实现对用户信息的增加、删除、修改和查询。
3.1.3.2 分析
界面可能使用控制台也可能使用Web等等。 (1) 识别对象界面视图类 逻辑控制类 数据模型类 (2) 分配职责 – 界面视图类负责处理界面逻辑比如显示菜单获取输入显示结果等。 – 逻辑控制类负责存储用户信息处理业务逻辑。比如添加、删除等 – 数据模型类定义需要处理的数据类型。比如用户信息。 (3) 建立交互
界面视图对象 ---- 数据模型对象 ---- 逻辑控制对象
3.1.3.3 设计
(1) 数据模型类UserModel – 数据编号 id,姓名 name,年龄 login_id,密码 pwd (2) 逻辑控制类UserController – 数据用户列表 list_user – 行为添加用户 add_user删除用户remove_student修改用户update_student (3) 界面视图类UserView – 数据逻辑控制对象controller – 行为显示菜单__display_menu选择菜单项__select_menu入口逻辑main 输入学生__input_users输出学生__display_user删除学生__delete_user 修改学生信息__modify_user
3.2 继承
3.2.1 继承方法
(1) 语法:
class 父类:def 父类方法(self):方法体class 子类(父类)def 子类方法(self):方法体儿子 子类()
儿子.子类方法()
儿子.父类方法()(2) 说明 子类直接拥有父类的方法. (3) 演示
class Person:def say(self):print(说话)class Teacher(Person):def teach(self):self.say()print(教学)class Student(Person):def study(self):self.say()print(学习)qtx Teacher()
qtx.say()
qtx.teach()xm Student()
xm.say()
xm.study()3.2.2 内置函数
(1) isinstance(对象, 类型) 对象是否为一种类型 (2) type(类型) 类型 对象的类型是否是一种类型 (3) 演示
# 对象 是一种 类型 isinstance(对象,类型)
# 老师对象 是一种 老师类型
print(isinstance(qtx, Teacher)) # True
# 老师对象 是一种 人类型
print(isinstance(qtx, Person)) # True
# 老师对象 是一种 学生类型
print(isinstance(qtx, Student)) # False
# 人对象 是一种 学生类型
print(isinstance(p, Student)) # False
# 是的关系
# 老师对象的类型 是 老师类型
print(type(qtx) Teacher) # True
# 老师对象的类型 是 人类型
print(type(qtx) Person) # False3.2.3 继承数据 (1) 语法
class 子类(父类):def __init__(self,父类参数,子类参数):super().__init__(参数) # 调用父类构造函数self.实例变量 参数(2) 说明 子类如果没有构造函数将自动执行父类的但如果有构造函数将覆盖父类的。此时必须通过super()函数调用父类的构造函数以确保父类实例变量被正常创建。 (3) 演示
class Person:def __init__(self, name, age0):self.name nameself.age age# 子类有构造函数,不会使用继承而来的父类构造函数[子覆盖了父方法,好像它不存在]
class Student(Person):# 子类构造函数父类构造函数参数,子类构造函数参数def __init__(self, name, age, score):# 调用父类构造函数super().__init__(name, age)self.score scorets Person(唐僧,22)
print(ts.name)
kw Student(悟空, 23, 100)
print(wk.name)
print(wk.score)3.2.4 定义
(1) 概念 重用现有类的功能并在此基础上进行扩展。 (2) 说明子类直接具有父类的成员共性还可以扩展新功能。 (3) 相关知识 – 父类基类、超类、子类派生类。 – 父类相对于子类更抽象范围更宽泛子类相对于父类更具体范围更狭小。 – 单继承父类只有一个例如 JavaC#。 – 多继承父类有多个例如CPython。 – Object类任何类都直接或间接继承自 object 类。
3.3 多态
3.3.1 定义
(1) 字面意思对于一种行为有不同表现形态。 (2) 概念对于父类的一个方法在不同的子类上有不同体现。 (3) 说明编码时调用父类方法运行时传递子类对象执行子类方法。
3.3.2 重写
(1) 定义在子类定义与父类相同的方法。 (2) 作用改变父类行为体现子类个性。
3.3.3 重写内置函数
(1) 定义Python中以双下划线开头、双下划线结尾的是系统定义的成员。我们可以在自定义类中进 行重写从而改变其行为。 (2) str 函数将对象转换为字符串(对人友好的) – 演示
class Movie:
def __init__(self, name, type, index):
self.name name
self.type type
self.index index
def __str__(self):
print(%s电影的类型是%s,指数是%s. % (self.name, self.type, self.index))
bjlz Movie(八角笼中,剧情,690761)
fs Movie(封神第一部,奇幻,532622)
print(bjlz)
print(fs)(3) 算数运算符
(4) 复合运算符重载
(5) 比较运算重载