Python:面向对象基础

基本理论

什么是对象

万物皆对象

对象是具体的事物

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

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 xxx(self):
        pass

定义类方法:

class A:
    @classmethod
    def xxx(cls):
        pass

定义静态方法:

class A:
    @taticmethod
    def xxx():
        pass

原文地址:https://www.cnblogs.com/wbyixx/p/12231568.html

时间: 2024-10-07 14:14:05

Python:面向对象基础的相关文章

python面向对象基础

面向对象基础 1. 简述 编程方式: 面向过程: 根据代码在脚本的堆叠顺序,从上到下依次执行 函数式编程:将相同功能的代码封装到函数中,直接调用即可,减少代码重复性 面向对象:对函数进行分类和封装,将同类的函数放到一个类中,使调用更简单 为嘛要面向对象 应用需求 要的对系统的cpu.内存.硬盘等进行监控,超过阈值则告警 while True:    if cpu利用率 > 90%:        #发送邮件提醒        连接邮箱服务器        发送邮件        关闭连接    

Python 面向对象基础知识

面向对象基础知识 1.什么是面向对象编程? - 以前使用函数 - 类 + 对象 2.什么是类什么是对象,又有什么关系? class 类: def 函数1(): pass def 函数2(): pass # obj是对象,实例化的过程 obj = 类() obj.函数1() ========== 面向对象不好 ============ ========== 函数编程好 ============== - 有时候,函数编程能实现?比较麻烦. - 面向对象非常的简单就能实现. 3.什么时候适用面向对象?

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

面向对象基础 面向对象编程 面向过程编程:类似于工厂的流水线 优点:逻辑清晰 缺点:扩展性差 面向对象编程:核心是对象二字,对象属性和方法的集合体,面向对象编程就是一堆对象交互 优点:扩展性强 缺点:逻辑非常复杂 类与对象 对象:属性和方法的集合体 类:一系列相同属性和方法的集合体 现实世界中先有对象后有类,python中先有类,再实例化出对象 对象的属性的查找顺序 先对象本身-->类-->父类-->父类的父类-->object-->自己定制的元类-->type 给对象

十六、python面向对象基础篇

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

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

1.#类 #类就是一个模板,模板里可以包含多个函数,函数里实现一些功能 #定义一个类 class bar: def foo(self,agr): print(self,agr) obj = bar() print(obj) print(obj.foo("调用类的方法")) 2.#方法 #把函数写在类里就是方法 #构造方法 #普通方法 class person: def __init__(self,name,age): #构造方法的特性,调用 类名() 后,自动执行构造方法 #self

python 面向对象基础

一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起(比方说,你定义了一个函数),便实现了代码重用,且代码由无结构走向了结构化,创建程序的过程变得更具逻辑性 3.我们定义函数都是独立于函数外定义变量,然后作为参数传递给函数,这意味着:数据与动作是分离的 4.如果我们把数据和动作内嵌到一个结构(函数

python——面向对象基础

概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强..." 面向过程编程最易被初学者接受,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,即:将之前实现的代码块复制到现需功能处. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 while True:     if cpu利用率 > 90%:     

8.python面向对象基础(封装,继承,多态)

一.面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中且在函数体之外.类变量通常不作为实例变量使用. 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据. 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写. 实例变量:定义在方法中的变量,只作用于当前实例的类

python 面向对象基础梳理三 继承、派生与组合

什么是继承 继承是一种创建新类的方式,是一种什么是什么的关系,继承的功能之一就是解决代码重用的问题,继承是一种创建新类的方式,在python 中,新建的一个类可以继承一个或者多个父类,父类由可以成为基类或者超类,新建的类称为派生类或子类. 继承的分类 继承可以分为 单继承和多继承,Python 2 和 python 3 中有经典类和新式类的区分,这里描述的是python3 示例演示 # 输入 class Pare1class: pass class Pare2class: pass class

python面向对象基础(三)内置方法 __xx__

__str__和__repr__,__format__ 改变对象的字符串显示__str__,__repr__ 自定制格式化字符串__format__ #_*_coding:utf-8_*_ format_dict={ '格式1':'{obj.name}-{obj.addr}-{obj.type}',#学校名-学校地址-学校类型 '格式2':'{obj.type}:{obj.name}:{obj.addr}',#学校类型:学校名:学校地址 '格式3':'{obj.type}/{obj.addr}/