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)基本概念 前言 话说三国时期曹军于官渡大败袁绍,酒席之间,曹操诗兴大发,吟道:喝酒唱歌,人生真爽! 众将直呼:"丞相好诗",于是命印刷工匠刻板印刷以流传天下; 待 ...
随机推荐
- 第四十二篇 入门机器学习——Numpy的基本操作——索引相关
No.1. 使用np.argmin和np.argmax来获取向量元素中最小值和最大值的索引 No.2. 使用np.random.shuffle将向量中的元素顺序打乱,操作后,原向量发生改变:使用np. ...
- HTML的链接标签
网页的链接标签 文本超链接 图像超链接 格式:<a href="path" target="目标窗口位置" >链接文本或图像</a> 锚 ...
- 「题解」「CF1103B」Game with modulo
简易中文题目 猜一个数字 \(a\),而你可以向机器提问一对 \((x,y)\) ,如果 \(x\bmod a\ge y \bmod a\) 机器返回字符串 x,反之返回字符串 y . 询问不能超过 ...
- CentOS之service iptables stop 显示not loaded
停止firewalld服务停止防火墙,并禁用这个服务 sudo systemctl stop firewalld.servicesudo systemctl disable firewalld.ser ...
- 2.17NOIP模拟赛(by hzwer) T1 小奇挖矿
[题目背景] 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值 w)的飞船,按既定 路线依次飞过喵星系的 n 个星球. [问题描述] 星球分为 2 类:资源型和维修型. 1. 资源型:含矿物质量 ...
- 题解【Codeforces886B】Vlad and Cafes
本题是模拟题. 我们可以用b数组记录每个数字在a数组中出现的最后位置,然后从0到2·10^5依次寻找最后一次出现最早的数(注意是0!),最后统计输出即可. AC代码: #include <bit ...
- url中的参数加密
有时候我们需要在地址栏传输一些信息,比如查询数据的时候,传一个参数location.href = "/admin/extract?name="+"参数aaa"’ ...
- E. Vus the Cossack and a Field (求一有规律矩形区域值) (有一结论待证)
E. Vus the Cossack and a Field (求一有规律矩形区域值) 题意:给出一个原01矩阵,它按照以下规则拓展:向右和下拓展一个相同大小的 0 1 分别和原矩阵对应位置相反的矩阵 ...
- Tex 一些命令
1. [!htp] 可以使这个内容跟随在前面的内容后面 假如前面是一段文字,后面是一幅图像,不知什么原因跑到其他地方去了.这时加个[!htp]可以使他紧紧跟在后面 ergdsgagdfgdfgfgaf ...
- codeforces 1245D(最小生成树)
题面链接:https://codeforces.com/problemset/problem/1245/D 题意大概是给你一些城市的坐标,可以在城市中建立发电站,也可以让某个城市和已经建好发电站的城市 ...