Python:面向对象基础
基本理论
什么是对象
万物皆对象
对象是具体的事物
- 拥有属性、行为
- 把许多零散的东西,封装成为一个整体
Python中一切东西都是对象,Python是一门特别彻底的面向对象编程语言(OOP)
其他编程语言很多还分基本类型和对象类型,而在python中,只有对象类型
面向过程 & 面向对象
两者都是解决问题的思路、思想,面向对象本身是面向过程的封装
- 面向过程:在解决问题的时候,关注的是解决问题的每一个过程(步骤)
- 按照步骤划分
- 摆一个任务,分解成具体的每一个步骤
- 面向对象:在解决问题的时候,关注的是解决问题所需要的对象
- 按照功能对象进行划分
- 找到对象,确定对象属性和行为
- 如何从面向过程到面向对象:
- 列举任务步骤
- 分离步骤中的对象和功能代码块
- 将功能代码划分到具体对象中
- 根据对象以及具体的行为,抽取出类
类
什么是类
类是某一类具体对象特征的抽象
类的作用
根据抽象的类,生产具体的对象
类的组成
名称、属性、方法
注意:
- 属性和方法,都是抽象的概念
- 在产生对象之后,对象才拥有具体的属性值,和方法实现
对象和类的关系
对象 -- 抽象 -- 类
类 -- 实例化 -- 对象
定义类
经典类的定义:
class 类名:
......
创建一个对象
obj = 类名()
创建对象时的底层运作:
- 首先会在内存中开辟一段空间(类的定义也会占用内存)
- 通过类变量获取类名:
xxx.__name__
- 通过对象获取类:
xxx.__class__
属性相关
属性和变量的区别
概念:
- 变量是:可以改变的值
- 属性是:属于某个对象的特征
访问权限:
- 变量:根据作用域不同,存在不同的访问权限
- 属性:只能通过对象来进行访问
- 对象也是通过变量来引用,也同样有作用域权限
判断依据:
- 宿主是否存在
添加属性
- 直接通过对象,动态添加
- 语法:
对象.属性 = 值
- 语法:
- 通过类的初始化方法(构造方法)
__init__()
增加了一个属性之后,内存中先开辟一段空间存储属性值,然后在对象的空间里存储这个值对象的引用变量
访问属性
直接通过对象.属性
访问
python提供了一个 __dict__
属性,是一个字典,里面包含了现在这个对象里的所有属性
修改属性
修改属性值:对象.属性 = 值
删除属性
del 对象.属性
类属性
增加类属性:
类名.属性 = 值
- 在类中,直接写
属性 = 值
查看类属性:
类名.属性
- 类属性也可以通过对象来访问:
对象.类属性
- 对象属性查找机制:
- 优先到对象自身去查找属性,找到则结束
- 如果没找到,则根据
__class__
找到对象对应的类,找这个类的属性
修改类属性:
- 通过类名进行修改:
类名.属性 = 值
对象.__class__.属性 = 值
- 注意:不能直接通过对象进行修改!
对象.属性 = xxx
是对象的增加属性和修改属性的语法
查看所有类属性:类名.__dict__
删除类属性:
del 类名.属性
- 不能通过对象删除,del只能删除对象的直系属性
类属性的内存存储问题:
- 属性都存储在一个字典中,这个字典是实际存在的,可以通过
__dict__
进行访问 类.__dict__
是一个只读属性- 总结:
- 一般情况下,属性存储在
__dict__
这个字典中,有些内置对象没有这个属性 - 一般对象可以直接修改
__dict__
属性 - 但是类对象的
__dict__
是只读的,默认无法修改,可以通过setattr的方法修改
- 一般情况下,属性存储在
类属性被各个对象共享
限制对象可以添加的属性
在类中写上:__slots__ = [......]
后续通过类创建的对象,都只能添加指定的属性
方法相关
类中方法定义概述
描述一个目标的行为动作
和函数非常类似:
- 都封装了一系列行为动作
- 都可以在被调用之后,执行一系列行为动作
- 最主要的区别就是:调用方式
方法的划分:
- 实例方法:默认第一个参数需要接收到一个实例
- 类方法:默认第一个参数需要接收到一个类
- 静态方法:第一个参数什么也不接收
注意:
- 划分依据是:方法的第一个参数
- 不管是哪一种方法,都是存储在类中的
- 不同类型方法的调用方式不同
定义方法
定义实例方法:
class A:
def shili(self):
pass
定义类方法:
class A:
@classmethod
def lei(cls):
pass
定义静态方法:
class A:
@taticmethod
def jingtai():
pass
调用方法
a = A()
a.shili() # 调用实例方法
A.lei() # 调用类方法
a.lei() # 实例也可以调用类方法
A.jingtai() # 静态方法也是通过类调用
不管是自己传递,还是解释器帮我们处理,最重要保证不同类型的方法第一个参数接收到的是它们想要的类型
实例方法
类方法
静态方法
不同类型方法中访问不同类型的属性
Python:面向对象基础的更多相关文章
- Python 面向对象 基础
编程范式概述:面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现 ...
- python面向对象基础
面向对象基础 1. 简述 编程方式: 面向过程: 根据代码在脚本的堆叠顺序,从上到下依次执行 函数式编程:将相同功能的代码封装到函数中,直接调用即可,减少代码重复性 面向对象:对函数进行分类和封装,将 ...
- Python 面向对象基础知识
面向对象基础知识 1.什么是面向对象编程? - 以前使用函数 - 类 + 对象 2.什么是类什么是对象,又有什么关系? class 类: def 函数1(): pass def 函数2(): pass ...
- python 面向对象基础和高级复习
面向对象基础 面向对象编程 面向过程编程:类似于工厂的流水线 优点:逻辑清晰 缺点:扩展性差 面向对象编程:核心是对象二字,对象属性和方法的集合体,面向对象编程就是一堆对象交互 优点:扩展性强 缺点: ...
- 十六、python面向对象基础篇
面向对象基础: 在了解面向对象之前,先了解下变成范式: 编程范式是一类典型的编程风格,是一种方法学 编程范式决定了程序员对程序执行的看法 oop中,程序是一系列对象的相互作用 python支持多种编程 ...
- 1.Python面向对象基础
面向对象(OOP) 面向对象编程--object oriented programming 简写 OOP 面向过程和面向对象的区别: 面向过程: 1.把完成某一个需求的所有步骤从头到尾逐步实现 2 ...
- [python面向对象]--基础篇
1.#类 #类就是一个模板,模板里可以包含多个函数,函数里实现一些功能 #定义一个类 class bar: def foo(self,agr): print(self,agr) obj = bar() ...
- Python面向对象基础:编码细节和注意事项
在前面,我用了3篇文章解释python的面向对象: 面向对象:从代码复用开始 面向对象:设置对象属性 类和对象的名称空间 本篇是第4篇,用一个完整的示例来解释面向对象的一些细节. 例子的模型是父类Em ...
- Python面向对象基础一
公司可能过一两个月就要从深圳搬到东莞松山湖,项目组的现在有的在转Java或其他语言的,问我们要不要转java+hoodap+spark方向,我还是先不转,毕竟之前是从ios转回C#,这现在在转其他的那 ...
- python面向对象基础-01
面向对象(OOP)基本概念 前言 话说三国时期曹军于官渡大败袁绍,酒席之间,曹操诗兴大发,吟道:喝酒唱歌,人生真爽! 众将直呼:"丞相好诗",于是命印刷工匠刻板印刷以流传天下; 待 ...
随机推荐
- 矩阵快速幂 裸 hdu1575
裸题,求A^n次后的对角线数字之和 #include<cstdio> #include<algorithm> #include<string.h> using na ...
- wget 显示网页内容到控制台
wget -q -O - http://www.microsoft.com
- winform学习(5)MDI窗体
SDI窗体 single document interface 单文档界面,即单个简单的窗体 MDI窗体 multiple document interface 多文档界面(主窗体与子窗体的关系,避免 ...
- 【转载】Java容器的线程安全
转自:http://blog.csdn.net/huilangeliuxin/article/details/12615507 同步容器类 同步容器类包括Vector和Hashtable(二者是早期J ...
- Linux上查看当前系统各内存分区信息
命令 ulimit -a -a 查看所有信息,同理,也可以例如 ulimit -s 只查看栈占内存信息
- win10 superfetch 使系统变慢
win10 superfetch是干什么的? 时间:2018-12-28 来源:莫回首系统 作者:win7 很多用户喜欢关注CPU的运行状态,来保障系统的运行速度不受影响,今早,有ghost win1 ...
- RestTemplate-记录
org.springframework.web.client.RestTemplate 1.从使用功能上看,是一种简化请求响应的工具类,从发送请求,到对返回的结果进行json解析.格式不对会有异常.
- 概率dp poj 2151
题意: 这道题目的意思很简单,有t个ACM队,m个题目,题目给出了每个队对每个题目做出的概率大小(0到1之间,包含0和1),要求每个队至少做出一道题(签到题),同时,要求获胜队必须至少能够做出n道题( ...
- Reinforcement Learning Algorithm 资源
算法源码: https://github.com/ljpzzz/machinelearning https://github.com/imraviagrawal/Reinforcement-Learn ...
- HttpServer性能比较
在自己的本子上随便测了下几款HttpServer,环境信息就不贴出来了,主要是比对下差距. 测试内容是输出 text/plain 的 hello, world. 先说结论:Netty > Joo ...