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)基本概念 前言 话说三国时期曹军于官渡大败袁绍,酒席之间,曹操诗兴大发,吟道:喝酒唱歌,人生真爽! 众将直呼:"丞相好诗",于是命印刷工匠刻板印刷以流传天下; 待 ...
随机推荐
- nvalidSchema: Missing dependencies for SOCKS support
首先需要安装pip3 1. 安装 setuptools wget --no-check-certificate https://pypi.python.org/packages/source/s/se ...
- Java常量,变量,对象(字面量)在JVM内存中的存储位置
Java常量,变量,对象(字面量)在JVM内存中的存储位置 2019-02-26 18:13:09 HD243608836 阅读数 540 收藏 更多 分类专栏: JAVA jvm 苦苦研究了快 ...
- Scrapy爬取伯乐在线的所有文章
本篇文章将从搭建虚拟环境开始,爬取伯乐在线上的所有文章的数据. 搭建虚拟环境之前需要配置环境变量,该环境变量的变量值为虚拟环境的存放目录 1. 配置环境变量 2.创建虚拟环境 用mkvirtualen ...
- 百炼OJ - 1002 - 方便记忆的电话号码
题目链接 思路 开个一千万的数组计数,最后遍历即可. #include<stdio.h> #include<string.h> #include<algorithm> ...
- bitset 位运算
1. 判断一个数是否是2的方幂n > 0 && ((n & (n - 1)) == 0 ) 解释((n & (n-1)) == 0): 如果A&B==0, ...
- js中yyyymmdd hh:mm:ss字符转换为Date
var dateString="20190102 10:30:35"; var pattern = /(\d{4})(\d{2})(\d{2})/; var formatedDat ...
- 引用opencv静态库的makefile写法
参考博客:https://blog.csdn.net/baidu_31872269/article/details/91985846 参考博客:https://blog.csdn.net/Felaim ...
- php 下载word 含图片
ob_start();//打开输出缓冲区 echo ' <html xmlns:o="urn:schemas-microsoft-com:office:office"xm ...
- Layui自定义模块的使用方式
为什么要自定义模块呢?好处很多.比如可以大量重用代码...... 根据layui官方的文档说明.首先第一步是要确定你要扩展的模块名称 现在做的是登录功能.因此扩展模块名叫 login 使用layui ...
- P & R 10
作为一个后端设计者,所需要掌握的技能其实就是熟练的利用工具,为自己服务. 需要的知识是什么?说的简单点,就是如何把设计的PPA搞上去. 说的复杂点,那就得从PPA需要注意的每个点去一一剖析.这个就太需 ...