基本理论

什么是对象

万物皆对象

对象是具体的事物

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

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. C++-POJ1018-Communication System

    贪心算法:先排序,再枚举最小带宽(B),每次更新当前最小花费(P)和以及答案(ans) #include <cstdio> #include <algorithm> using ...

  2. Java-POJ1012-Joseph

    打表啦 约瑟夫环,处理时下表统一为从0开始更方便! import java.util.Scanner; public class poj1012 { public static boolean cal ...

  3. kali linux2019.4安装启动后中文乱码

    1.鼠标右键找到黑框框打开终端 2.终端执行后重启,乱码解决. sudo apt-get install ttf-wqy-zenhei

  4. PHP windoews调用OpenOffice实现word/ppt转PDF

    1.安装免费的openOffice软件 2.需要JDK支持 3.安装完openOffice后,在开始--运行中输入Dcomcnfg打开组件服务.在组件服务—计算机—我的电脑—DCOMP配置中 4. 先 ...

  5. Python - 安装 - 在 Alpine Linux 下安装 Python2

    概述 在 Alpine Liunx 下安装 python2 感觉又是水了一发... 感觉还是有点丢人, 就像在帮小学生写作业, 写完了后还想找人夸我... 最近看 docker 和 jenkins, ...

  6. 解决nginx报错:nginx: [emerg] bind() to 0.0.0.0:8088 failed (13: Permission denied)

    报错描述: nginx: [emerg] bind() to 0.0.0.0:8088 failed (13: Permission denied) 通过ansible远程给主机更换端口并重新启动ng ...

  7. robots.txt 让搜索引擎不再收录网站

    有没有担心过自己的隐私会在强大的搜索引擎面前无所遁形?想象一下,如果要向世界上所有的人公开你的私人日记,你能接受吗?的确是很矛盾的问题,站长们大都忧虑“如何让搜索引擎收录的我的网站?”,而我们还是要研 ...

  8. python测量代码运行时间方法

    Python 社区有句俗语: “python自己带着电池” ,别自己写计时框架. Python3.2具备一个叫做 timeit 的完美计时工具可以测量python代码的运行时间. timeit 模块: ...

  9. render方法渲染组件和在webpack中导入vue

    使用component注册的组件div容器里可以放多个,但是使用render的只能放一个 <div id="app"> <p>我可以放两个</p> ...

  10. 跨平台C++ IDE

    参考博客:https://blog.csdn.net/m0_37314675/article/details/77881287