基本理论

什么是对象

万物皆对象

对象是具体的事物

  • 拥有属性、行为
  • 把许多零散的东西,封装成为一个整体

Python中一切东西都是对象,Python是一门特别彻底的面向对象编程语言(OOP)

其他编程语言很多还分基本类型和对象类型,而在python中,只有对象类型

面向过程 & 面向对象

两者都是解决问题的思路、思想,面向对象本身是面向过程的封装

  • 面向过程:在解决问题的时候,关注的是解决问题的每一个过程(步骤)

    • 按照步骤划分
    • 摆一个任务,分解成具体的每一个步骤
  • 面向对象:在解决问题的时候,关注的是解决问题所需要的对象
    • 按照功能对象进行划分
    • 找到对象,确定对象属性和行为
  • 如何从面向过程到面向对象:
    • 列举任务步骤
    • 分离步骤中的对象和功能代码块
    • 将功能代码划分到具体对象中
    • 根据对象以及具体的行为,抽取出类

什么是类

类是某一类具体对象特征的抽象

类的作用

根据抽象的类,生产具体的对象

类的组成

名称、属性、方法

注意:

  • 属性和方法,都是抽象的概念
  • 在产生对象之后,对象才拥有具体的属性值,和方法实现

对象和类的关系

对象 -- 抽象 -- 类

类 -- 实例化 -- 对象

定义类

经典类的定义:

class 类名:
......

创建一个对象

obj = 类名()

创建对象时的底层运作:

  • 首先会在内存中开辟一段空间(类的定义也会占用内存)
  • 通过类变量获取类名:xxx.__name__
  • 通过对象获取类:xxx.__class__

属性相关

属性和变量的区别

概念:

  • 变量是:可以改变的值
  • 属性是:属于某个对象的特征

访问权限:

  • 变量:根据作用域不同,存在不同的访问权限
  • 属性:只能通过对象来进行访问
    • 对象也是通过变量来引用,也同样有作用域权限

判断依据:

  • 宿主是否存在

添加属性

  1. 直接通过对象,动态添加

    • 语法:对象.属性 = 值
  2. 通过类的初始化方法(构造方法)
    • __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:面向对象基础的更多相关文章

  1. Python 面向对象 基础

    编程范式概述:面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现 ...

  2. python面向对象基础

    面向对象基础 1. 简述 编程方式: 面向过程: 根据代码在脚本的堆叠顺序,从上到下依次执行 函数式编程:将相同功能的代码封装到函数中,直接调用即可,减少代码重复性 面向对象:对函数进行分类和封装,将 ...

  3. Python 面向对象基础知识

    面向对象基础知识 1.什么是面向对象编程? - 以前使用函数 - 类 + 对象 2.什么是类什么是对象,又有什么关系? class 类: def 函数1(): pass def 函数2(): pass ...

  4. python 面向对象基础和高级复习

    面向对象基础 面向对象编程 面向过程编程:类似于工厂的流水线 优点:逻辑清晰 缺点:扩展性差 面向对象编程:核心是对象二字,对象属性和方法的集合体,面向对象编程就是一堆对象交互 优点:扩展性强 缺点: ...

  5. 十六、python面向对象基础篇

    面向对象基础: 在了解面向对象之前,先了解下变成范式: 编程范式是一类典型的编程风格,是一种方法学 编程范式决定了程序员对程序执行的看法 oop中,程序是一系列对象的相互作用 python支持多种编程 ...

  6. 1.Python面向对象基础

    面向对象(OOP) 面向对象编程--object oriented programming 简写 OOP   面向过程和面向对象的区别: 面向过程: 1.把完成某一个需求的所有步骤从头到尾逐步实现 2 ...

  7. [python面向对象]--基础篇

    1.#类 #类就是一个模板,模板里可以包含多个函数,函数里实现一些功能 #定义一个类 class bar: def foo(self,agr): print(self,agr) obj = bar() ...

  8. Python面向对象基础:编码细节和注意事项

    在前面,我用了3篇文章解释python的面向对象: 面向对象:从代码复用开始 面向对象:设置对象属性 类和对象的名称空间 本篇是第4篇,用一个完整的示例来解释面向对象的一些细节. 例子的模型是父类Em ...

  9. Python面向对象基础一

    公司可能过一两个月就要从深圳搬到东莞松山湖,项目组的现在有的在转Java或其他语言的,问我们要不要转java+hoodap+spark方向,我还是先不转,毕竟之前是从ios转回C#,这现在在转其他的那 ...

  10. python面向对象基础-01

    面向对象(OOP)基本概念 前言 话说三国时期曹军于官渡大败袁绍,酒席之间,曹操诗兴大发,吟道:喝酒唱歌,人生真爽! 众将直呼:"丞相好诗",于是命印刷工匠刻板印刷以流传天下; 待 ...

随机推荐

  1. spring(四):IoC初始化流程&BeanDefinition加载注册

    ApplicationContext context = new ClassPathXmlApplicationContext("hello.xml"); /** * * @par ...

  2. Java常量,变量,对象(字面量)在JVM内存中的存储位置

    Java常量,变量,对象(字面量)在JVM内存中的存储位置 2019-02-26 18:13:09 HD243608836 阅读数 540  收藏 更多 分类专栏: JAVA jvm   苦苦研究了快 ...

  3. 题解【洛谷P3951】[NOIP2017]小凯的疑惑

    题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想知道在无法准确支付的物品中,最贵的 ...

  4. AC3 Rematrix

    当L R channel highly correlated时,AC3 encoder 使用rematrix技术压缩L/R的和和差. 原始信号为left,right,使用rematrix压缩信号为le ...

  5. 【Python】数值运算函数

  6. 滑雪(dfs+dp)

    滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 113903   Accepted: 43478 Description ...

  7. django入门与实践(开)

    1.什么是Django? 基于python的高级web开发框架 高效 快速 免费 开源 正常上网流程 浏览器浏览网页的基本原理 请求响应过程 开发环境搭建 Python Django pip inst ...

  8. 【做题笔记】P1090 合并果子

    题目大意:给定 \(n\) 个数,每次可以任意选两个数 \(a_i,a_j\) 相加,把相加的结果作为一个新数继续执行此操作,直到只剩一个数为止.现要求使最后得出的这个数最小. 一个显然的贪心策略:每 ...

  9. 传奇脚本中 SendMsg 编号说明

    0 1 2 3 4 5 60对全服人说1.发送普通红色广播信息. 2.发送普通红色广播信息,并显示NPC名称. 3.发送普通红色广播信息,并人物NPC名称. 4.在NPC头顶,显示普通说话信息. 5. ...

  10. GIT-maven

     maven 一:什么是maven 1.maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的创建,报告和文档的软件项目管理工具. 2.maven是跨平台的项目管理工具,主要服务于 ...