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)基本概念 前言 话说三国时期曹军于官渡大败袁绍,酒席之间,曹操诗兴大发,吟道:喝酒唱歌,人生真爽! 众将直呼:"丞相好诗",于是命印刷工匠刻板印刷以流传天下; 待 ...
随机推荐
- mybatis(六):设计模式 - 装饰器模式
- listView有感
listView显示出来框,设置的是裁切后显示出来的界面,而非能装入item的空间.
- 【译】PHP 内核 — 字符串管理
[译]PHP 内核 - 字符串管理 (Strings management: zend_string 译文) 原文地址:http://www.phpinternalsbook.com/php7/int ...
- EditPlus等编辑器选中列(块)的方法
EditPlus 1)菜单:编辑 -> 选择 -> 列选择2)先按下 Alt + C ,释放,然后移动鼠标或键盘上下左右键进行选择注意:在自动换行的模式下是不行的,改为不自动换行就行了. ...
- bzoj1690:[Usaco2007 Dec]奶牛的旅行 (分数规划 && 二分 && spfa)
用dfs优化的spfa判环很快啦 分数规划的题目啦 二分寻找最优值,用spfa判断能不能使 Σ(mid * t - p) > 0 最优的情况只能有一个环 因为如果有两个环,两个环都可以作为奶牛的 ...
- mvc:annotation-driven的前缀 "mvc"未绑定
缺少MVC的配置,正确配置如下: <beans xmlns="http://www.springframework.org/schema/beans" xmlns ...
- node.js 和 yarn 安装
电脑环境 windows10 专业版 64 位 node.js 安装 Node.js 官方网站下载:https://nodejs.org/en/ 之后一步步得傻瓜式安装 配置环境变量和查看node.j ...
- ASP.NET Core Web API 控制器与方法返回输出
DATA ACCESS LAYER 在一些不同的示例教程中,我们可能看到 DAL 的实现在主项目中,并且每个控制器中都有实例.我们不建议这么做. 当我们编写 DAL 时,我们应该将其作为一个独立的服务 ...
- 编程道拓扑bcd.top 0x01/ 开局第一篇: 随便聊聊/ 随笔
0x01 开局 编程道拓扑(bcd.top)是一个前端从业者的思考和总结, 如果你喜欢, 欢迎关注! 作者是一个前端从业者, 本系列会总结作者在工作和学习中的一些思考, 会有具体的技术点, 也会有关于 ...
- (matlab)自定义图像(matlab)
clc;clear all;A=[0 230 255 60 30 100];A=uint8(A);imshow(A,'InitialMagnification','fit') 如图: clc;clea ...