python-面向对象-01课堂笔记
面向对象
''''
1、面向过程编程
核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么
基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式
优点:复杂的问题流程化、进而简单化
缺点:可扩展性差
2、面向对象
核心"对象"二字,对象指的是特征与技能的结合体,
基于该思想编写程序就好比在创造一个世界,你就是这个世界的上帝,是一种
上帝式的思维方式
优点:可扩展性强
缺点:编程的复杂度高于面向过程
重点:面向对象的核心体现是将数据和处理数据的程序封装到对象中
'''
名称空间操作
import re
print(re.__dict__)
def fn():
pass
print(fn.__dict__)
类与对象
# 类:具有相同特征与行为事物集合体的抽象
# 对象:现实中,实际存在的各个事物,也就是抽象出的类的具体表现
# 定义类
class Student:
pass
# 产生对象
stu = Student()
# 添加特征与行为
stu.name = 'Owen'
stu.get_age = lambda age: age
初始化方法
class Student:
def __init__ (self, name):
self.name = name
属性的查找顺序
class Student:
school = "Oldboy"
def __init__ (self, name):
self.name = name
对象方法与类方法
class Student:
school = "Oldboy"
def __init__ (self, name):
self.name = name
def study(self):
print(self.name + '学习')
@classmethod
def school_time(cls):
print('8点半')
面向对象三大特性:封装、继承、多态
封装
# 封装:对外隐藏对象的属性与功能的实现细节
# 优点:保证数据的安全性
# 应对措施:对外提供安全的操作结构,外部仍然可以通过接口来操作对象的属性
私有化
class Student:
__identity = '学生'
def __init__(self, id, name):
self.__id = id # 将id设置为私有的
self.name = name
功能的私有化
class Student:
__identity = '学生'
def __init__(self, id, name):
self.__id = id # 将id设置为私有的
self.name = name
# 仅供内部使用的函数
def __test():
print('仅供内部使用的函数')
对外提供接口
class Student:
def __init__(self, id, name):
self.__id = id # 将id设置为私有的
self.name = name
@property
def id(self):
return self.__id
@id.setter
def id(self, value):
self.__id = value
@id.deleter
def id(self):
del self.__id
组合:自定义类的对象作为自定义类的属性
class Teacher:
def __init__(self, name):
self.name = name
class Student:
def __init__(self, id, name, teacher):
self.__id = id # 将id设置为私有的
self.name = name
self.teacher = teacher
t = Teacher('Tom')
s = Student(1, 'Bob', t)
print(s.teacher.name)
继承
# 继承:子类与父类形成的一种关系,可以让子类能直接从父类中获取属性与方法
# 优点:减少代码冗余
语法
class Sup:
pass
class Sub(Sup):
pass
属性与方法的继承
# 父类所有非封装的属性和方法都可以被继承
有父类时的属性(方法)查找顺序
class Sup:
num = 10
def test(self):
print('sup test')
class Sub(Sup):
num = 10
def test(self):
print('sub test')
# 子类优先使用自身的属性和方法
子类重写父类方法
# 由于属性查找顺序,所以子类可以重写父类的方法
子类重用父类方法
# 子类中利用super(子类名, 当前子类对象)可以调用父类的方法
# Python3中可以简写super()
经典类与新式类
# 经典类:Python2中没有明确继承关系的类(没有直接或间接基础object的类)
# 新式类:没有直接或间接基础object的类(Python3中没有明确继承关系的类默认继承object)
多继承的属性查找顺序
# 菱形继承下
# 经典类:采用深度优先查找方式
# 新式类:采用广度优先查找方式
接口
# 提供功能说明的,Python中没有接口的语法
抽象类
# 利用abc模块实现抽象类
import abc
class ABC_Sup(metaclass=abc.ABCMeta):
# 定义抽象方法,无需实现功能,继承抽象类的子类必须实现该方法
@abc.abstractmethod
def read(self):
pass
多态
# 事物的多种形态
# 1.利用继承关系形成的多态
# 2.利用鸭子类型形成的多态
接口
# 提供功能说明的,Python中没有接口的语法
抽象类
# 利用abc模块实现抽象类
import abc
class ABC_Sup(metaclass=abc.ABCMeta):
# 定义抽象方法,无需实现功能,继承抽象类的子类必须实现该方法
@abc.abstractmethod
def read(self):
pass
多态
# 事物的多种形态
# 1.利用继承关系形成的多态
# 2.利用鸭子类型形成的多态
内置方法
# 格式化:__str__()
# 析构:__del__()
# 了解:__setattr__()、__setitem__()
反射
# 反射:通过字符串与类及类的对象的属性建立关联
'''
setattr
getattr
hasattr
delattr
'''
异常
# 程序运行时的错误
'''
异常三部分信息:
1.追踪信息
2.类型
3.值 异常处理结构:
try:
# 会出现异常的代码块
except 异常类型 as 异常别名:
# 异常处理逻辑
else:
# 没有出现异常会执行该分支
finally:
# 无论是否出现异常都会执行该分支
主动抛出异常
raise 异常类型('异常信息')
自定义异常类:
class MyError(BaseException):
def __init__(self, msg):
self.msg = msg
断言:
assert 断言条件
'''
| 异常名称 | 描述 |
|---|---|
| BaseException | 所有异常的基类 |
| SystemExit | 解释器请求退出 |
| KeyboardInterrupt | 用户中断执行(通常是输入^C) |
| Exception | 常规错误的基类 |
| StopIteration | 迭代器没有更多的值 |
| GeneratorExit | 生成器(generator)发生异常来通知退出 |
| StandardError | 所有的内建标准异常的基类 |
| ArithmeticError | 所有数值计算错误的基类 |
| FloatingPointError | 浮点计算错误 |
| OverflowError | 数值运算超出最大限制 |
| ZeroDivisionError | 除(或取模)零 (所有数据类型) |
| AssertionError | 断言语句失败 |
| AttributeError | 对象没有这个属性 |
| EOFError | 没有内建输入,到达EOF 标记 |
| EnvironmentError | 操作系统错误的基类 |
| IOError | 输入/输出操作失败 |
| OSError | 操作系统错误 |
| WindowsError | 系统调用失败 |
| ImportError | 导入模块/对象失败 |
| LookupError | 无效数据查询的基类 |
| IndexError | 序列中没有此索引(index) |
| KeyError | 映射中没有这个键 |
| MemoryError | 内存溢出错误(对于Python 解释器不是致命的) |
| NameError | 未声明/初始化对象 (没有属性) |
| UnboundLocalError | 访问未初始化的本地变量 |
| ReferenceError | 弱引用(Weak reference)试图访问已经垃圾回收了的对象 |
| RuntimeError | 一般的运行时错误 |
| NotImplementedError | 尚未实现的方法 |
| SyntaxError | Python 语法错误 |
| IndentationError | 缩进错误 |
| TabError | Tab 和空格混用 |
| SystemError | 一般的解释器系统错误 |
| TypeError | 对类型无效的操作 |
| ValueError | 传入无效的参数 |
| UnicodeError | Unicode 相关的错误 |
| UnicodeDecodeError | Unicode 解码时的错误 |
| UnicodeEncodeError | Unicode 编码时错误 |
| UnicodeTranslateError | Unicode 转换时错误 |
| Warning | 警告的基类 |
| DeprecationWarning | 关于被弃用的特征的警告 |
| FutureWarning | 关于构造将来语义会有改变的警告 |
| OverflowWarning | 旧的关于自动提升为长整型(long)的警告 |
| PendingDeprecationWarning | 关于特性将会被废弃的警告 |
| RuntimeWarning | 可疑的运行时行为(runtime behavior)的警告 |
| SyntaxWarning | 可疑的语法的警告 |
| UserWarning | 用户代码生成的警告 |
python-面向对象-01课堂笔记的更多相关文章
- Python面向对象01 /面向对象初识、面向对象结构、类、self、实例化对象
Python面向对象01 /面向对象初识.面向对象结构.类.self.实例化对象 目录 Python面向对象01 /面向对象初识.面向对象结构.类.self.实例化对象 1. 面向对象初识 2. 面向 ...
- JAVA的面向对象编程--------课堂笔记
面向对象主要针对面向过程. 面向过程的基本单元是函数. 什么是对象:EVERYTHING IS OBJECT(万物皆对象) 所有的事物都有两个方面: 有什么(属性):用来描述对象. 能够做什么 ...
- Python—面向对象01
1.如何使用类 # 先定义类 class LuffyStudent(): school = "luffycity" # 数据属性 def learn(self): # 函数属性 p ...
- C++基本程序设计——面向对象程序设计课堂笔记
主要对老师上课的ppt的笔记整理 C++基本程序设计 1.c++的输入输出 使用cin,cout和流运算符,开头须有 #include<iostream> (1)cin语句:cin> ...
- python 面向对象专题(一):面向对象初识、面向对象结构、类、self、实例化对象
https://www.cnblogs.com/liubing8/p/11301344.html 目录 Python面向对象01 /面向对象初识.面向对象结构.类.self.实例化对象 1. 面向对象 ...
- 知了课堂 Python Flask零基础 笔记整理
目录 起步 安装Python2.7: Python虚拟环境介绍与安装: pip安装flask: 认识url: URL详解 web服务器和应用服务器以及web应用框架: Flask 第一个flask程序 ...
- python进阶01 面向对象、类、实例、属性封装、实例方法
python进阶01 面向对象.类.实例.属性封装.实例方法 一.面向对象 1.什么是对象 #一切皆对象,可以简单地将“对象”理解为“某个东西” #“对象”之所以称之为对象,是因为它具有属于它自己的“ ...
- Python 面向对象笔记
Python 面向对象课程笔记 前言 Python 面向对象 正文 基本概念 什么是对象: 万物皆对象 对象是具体物体: 拥有属性 拥有行为 封装零散为整体 OOP(Object Oriented P ...
- [Python学习笔记][第六章Python面向对象程序设计]
1月29日学习内容 Python面向对象程序设计 类的定义与使用 类定义语法 使用class关键词 class Car: def infor(self): print("This is ca ...
随机推荐
- 【牛客网-剑指offer】用两个栈实现队列
题目: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 知识点及概念: 队列:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而 ...
- navigator对象-了解
navigator 对象包含有关浏览器的信息,它有很多属性,我们最常用的是 userAgent ,该属性可以返回由客户机发送服务器的 user-agent 头部的值 下面前段代码可以判断用户使用哪个终 ...
- mysql-视图及索引简介
一.视图的创建.作用及注意事项 1.创建:create view 视图名 as select 语句: 2.删除:drop view 视图名 3.作用: 数据库视图允许简化复杂查询 数据库视图有助于限制 ...
- 从零开始搭建系统2.8——HDFS安装及配置
从零开始搭建系统2.8——HDFS安装及配置
- sqldeveloper全部导出
点击Tools--Export User Objects 这种方式可以导出当前用户拥有的所有对象,包括表.视图.触发器.同义词等等,对于表,只能导出表结构(建表语句),不能导出数据, 选中要导出的对象 ...
- 使用Turbine对集群进行监控
为什么要使用Turbine Turbine是聚合服务器发送事件流数据的一个工具,hystrix的监控中,只能监控单个节点,实际生产中都为集群,因此可以通过turbine来监控集群下hystrix的me ...
- css负边距之详解(子绝父相)
来源 | http://segmentfault.com 原文 | The Definitive Guide to Using Negative Margins 自从1998年CSS2作为推荐以 ...
- React 组件间传值
壹 .了解React传值的数据 一. 创建组件的方法 一 . 1 通过function声明的组件特点是: 1)function创建的组件是没有state属性,而state属性决定它是不是有生命周期 ...
- 后端获取前端的多个数据用getlist
authors = request.POST.getlist("authors") print(authors) 得到一串作者的名字
- HZOI2019SF
Simulation Final 坑.下午我要爆零(RP++) upd: 哈哈哈哈哈哈哈哈哈哈我真的爆零了哈哈哈哈哈哈哈哈哈哈 关于细节, T1A了但是和T3交反了哈哈哈哈哈哈哈哈哈哈 我说我真的不是 ...