python 学习笔记十二 类与对象

对象(object)

什么是对象

面向对象

  • python是一门面向对象的编程语言
  • 面向对象就是语言中所有操作都是通过对象进行的;
  • 面向过程的编程语言:面向过程就是将程序的逻辑分解为一个一个的步骤,通过对每个步骤的抽象来完成程序;
  • 面向过程编写的代码往往只适用于一个功能,要实现别的功能,需要从新编写,复用性较低,也不方便维护;
  • 面向对象的编程语言,关注的是对象不关注过程;需要执行的功能保存在对应的对象中;

类(class)

  • 目前学习的都是python内置对象;内置对象并不能完全满足需求,因此需要自定义对象;
  • 我们需要根据类来创建对象;对象是类的示例,如int(),bool()等都是类;
    在这里插入图片描述
  • 如果多个对象是通过一个类创建的,则称这些对象就是以类对象;

定义简单类

语法

class 类名([父类]):
  代码块
在这里插入图片描述
注: 中括号[]里内容可以省略;

创建对象

  • 类似调用函数调用类名创建对象;
    obj1就是一个通过my_class创建的对象
    在这里插入图片描述

isinstance()

  • isinstance()用于检查一个对象是否是一个类的实例;

    a是int类中的对象,不是my_class类的对象,所以返回false;
    obj1是my_class中对象,所以返回true;

对象创建流程(简单)

  1. 创建一个变量
  2. 在内存中创建一个新对象
  3. 将对象的id赋值给变量
  • 可以向对象中添加变量,对象中的变量叫做属性
    • 语法 对象.属性名=值
      在这里插入图片描述

定义类

  • 类和对象都有两部分组成
    • 数据(属性),如一个人有身高、体重、姓名等数据;
    • 行为(方法),如一个有跑、走、跳等行为;

定义语法

class 类名([父类]):
  代码块

  • 在类的代码块中,可以定义变量和函数
    • 变量会成为所有对象的公共属性,所有对象都可以通过对象名.属性名来访问这些变量;
      在这里插入图片描述
    • 函数称为方法会成为所有对象的公共方法,所有对象都可以通过 对象名. 方法名()来访问这些方法;
    • 注意 方法调用时会默认传递一个实参,所有方法定义时需至少定义一个形参;否则会报错;
      在这里插入图片描述
类和对象查找流程
  • 当我们调用对象的属性时,解析器会先在当前对象中寻找是否含有该属性,若有,则返回该值,若没有,则去对象所属类中去寻找,若有则返回该值,若没有则报错;
  • 如果属性或方法是所有的示例共享的,则应该保存到类对象中,
  • 如果属性或方法是某个对象独有的,则保存到某个类对象中,
方法第一个参数
  • 方法每次被调用时,解析器都会自动传递第一个实参,该实参就是调用该方法的对象本身,如果是对象1调的,则第一个参数就是对象1;如果是对象2调的,则第一个参数就是对象2;一般将其命名为self;

用self可以访问调用对象的属性;
在这里插入图片描述

类的特殊方法init

  • 在类中可以定义一些特殊方法(魔术方法),特殊方法以__(两个下划线)开头,__(两个下划线)结尾,特殊方法不需要我们自己调用,它会在特殊时刻自动调用
  • init会在对象创建时调用
    在这里插入图片描述

对象创建流程(完整)

  1. 创建一个变量
  2. 在内存中创建一个新对象
  3. 执行类代码块中的代码,只在类定义的时候执行一次;
  4. 执行_init(self)_方法,每创建一个对象执行一次;
  5. 将对象的id赋值给变量

属性和方法

类属性
  • 类中定义的变量称为类属性,类属性能通过实例对象和类对象来访问
    在这里插入图片描述
  • 类属性只能通过类对象修改
    在这里插入图片描述
实例属性
  • 通过实例对象添加的属性称为实例属性
  • 实例属性只能通过实例对象来访问和修改
    在这里插入图片描述
实例方法
  • 在类中定义,第一个参数是self,也就是调用该函数的对象
  • 实例方法可以通过实例和类调用
    • 通过实例调用时,会自动将调用对象作为self传入
    • 通过类调用时,需要手动传入对象作为self

下面演示的两种方式等价
在这里插入图片描述

类方法
  • 用装饰器@classmethod来修饰的方法就是类方法
  • 类方法的第一个参数是cls,会被自动传递,cls就是当前的类对象
  • 类方法可以通过实例和类调用,两者没有区别
    在这里插入图片描述
静态方法
  • 静态方法不需要传递参数,可以通过类和实例调用;
  • 静态方法只是一个保存到当前类的函数,是一个工具方法,与类关系不大

类的基本结构

class 类名([父类]):
  公共属性
  …
  def __ init __(self,…)
  …
  其他方法
  …

发布了85 篇原创文章 · 获赞 158 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/Late_whale/article/details/104158994