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 ...
随机推荐
- Javascript高级程序设计--读书笔记之面向对象(一)
哈哈哈万物皆对象,终于到了js的面向对象篇. 一.属性类型 (1)数据属性 数据属性包含一个数据值的位置,在这个位置可以写入和读取数值,数据属性有四个描述器行为的特性 [[Configurable]] ...
- 微信小程序の小程序事件流
一.什么是事件? 事件是视图层到逻辑层的通讯方式:事件可以将用户的行为,反馈到逻辑层进行处理:事件可以绑定在组件上,触发事件后,就会执行逻辑层中对应的事件处理函数:事件对象可以携带额外信息. 二.事件 ...
- JavaScript_DOM(文件对象模型)
DOM(文档对象模型)是针对 HTML 和 XML 文档的一个 API(应用程序编程接口). DOM 描绘了一个层次化的节点树,允许开发人员添加.移除和修改页面的某一部分. DOM1 级将 HTML ...
- Ubuntu 14.04 Sublime Text3 Java编译运行(最简单的方法)
Sublime,结果发现只能编译,无法直接运行,于是就在网上搜解决方法,发现大部分方法都是告诉你要进入Java.sublime-packag这个文件,然后再修改JavaC.sublime-build, ...
- python os模块用法
import os #os主要做路径管理import glob #glob主要做搜索查询匹配import sys inputpath = r"C:\Users\Administrato ...
- Android蓝牙自动配对Demo,亲测好使!!!(转)
蓝牙自动配对,即搜索到其它蓝牙设备之后直接进行配对,不需要弹出配对确认框或者密钥输入框. 转载请注明出处http://blog.csdn.net/qq_25827845/article/details ...
- PHP-删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示例 1 ...
- 微信小程序分享功能的path路径
表示被微信小程序坑惨了 糟心的开始写,老板说先不上太复杂,就先显示了两个页面,然后开开心心的发布,测试了几遍,没啥问题呀.结果,一上上去,就被老板批了! 啥呀! 这分享怎么这个鬼样子!明明我看文档都是 ...
- mybatis xml中大于号小于号的代替
第一种写法(1): 原符号 < <= > >= & ' "替换符号 < <= > >= & ' " ...
- thinkphp IP获取和定位
系统内置了get_client_ip方法用于获取客户端的IP地址,使用示例: $ip = get_client_ip(); 如果要支持IP定位功能,需要使用扩展类库Org\Net\IpLocation ...