03. Python 类的构造方法、析构方法、实例方法

AI 概述
1. 实例方法1.1 定义1.2 例子2. 构造方法2.1 为什么需要构造方法2.2 定义2.3 例子3. 析构方法3.1 del 语句3.2 定义3.3 例子 上节我们学习了Python 的类属性和实例属性的知识点,本节我们会继续学习关于类的知识。 这节我们会学习类的构造方法、析构方法和实例方法。 1. 实例方法 1.1 定义 实例方法是用...
目录
文章目录隐藏
  1. 1. 实例方法
  2. 2. 构造方法
  3. 3. 析构方法

上节我们学习了Python 的类属性和实例属性的知识点,本节我们会继续学习关于类的知识。

这节我们会学习类的构造方法、析构方法和实例方法。

1. 实例方法

1.1 定义

实例方法是用于访问对象实例属性的方法,语法如下:

class 类:
    def 实例方法(self):
        self.属性

实例方法定义在类中,它的第一个参数 self 指向调用该方法的对象,在实例方法中通过self.属性访问对象的实例属性。

1.2 例子

每个人具有 name 和 age 的属性,创建一个类 Person,在类 Person 中定义实例方法 introduce 访问对象的属性,代码示例如下:

class Person:
    def introduce(self):
        print('name = %s, age = %d' % (self.name, self.age))

tom = Person()    
tom.name = 'tom'
tom.age = 10
tom.introduce()

jerry = Person()
jerry.name = 'jerry'
jerry.age = 20
jerry.introduce()
  • 在第 1 行,定义了类 Person;
  • 在第 2 行,定义了类 Person 的方法 introduce,introduce 的 self 参数指向调用 introduce 方法的对象;
  • 在第 3 行,introduce 方法通过 self.name 和 self.age 访问对象的属性;
  • 在第 5 行,使用类 Person 创建一个对象 tom;
  • 在第 6 行,设置对象 tom 的属性 name,该属性为实例属性;
  • 在第 7 行,设置对象 tom 的属性 age,该属性为实例属性;
  • 在第 8 行,调用对象 tom 的方法 introduce,对象 tom 被传递给方法 introduce,作为 self 参数,在执行 introduce 时,self 参数指向对象 tom;
  • 在第 10 行,使用类 Person 创建一个对象 jerry;
  • 在第 11 行,设置对象 jerry 的属性 name,该属性为实例属性;
  • 在第 12 行,设置对象 jerry 的属性 age,该属性为实例属性;
  • 在第 13 行,调用对象 jerry 的方法 introduce,对象 jerry 被传递给方法 introduce,作为 self 参数,在执行 introduce 时,self 参数指向对象 jerry。

程序运行输出如下:

name = tom, age = 10
name = jerry, age = 20

2. 构造方法

2.1 为什么需要构造方法

在前面的演示实例方法的程序中,创建了两个对象 tom 和 age,创建对象后需要设置属性的初始值,具体的过程如下所示:

  • 在第 5 行,使用类 Person 创建一个对象 tom;
  • 在第 6 行,通过 tom.name = ‘TOM’ 设置对象 tom 的属性 name;
  • 在第 7 行,通过 tom.age = 10 设置对象 tom 的属性 age;
  • 在第 10 行,使用类 Person 创建一个对象 jerry;
  • 在第 11 行,通过 jerry.name = ‘TOM’ 设置对象 jerry 的属性 name;
  • 在第 12 行,通过 jerry.age = 10 设置对象 jerry 的属性 age。

在初始化对象属性时,存在一个明显的问题:初始化 tom 的代码块和初始化 jerry 的代码块是类似和重复的。Python 提供了一个特殊的方法:构造方法,该方法用于初始化对象属性,用于解决这个问题。

2.2 定义

构造方法是用于初始化对象属性的方法,语法如下:

class 类:
    def __init__(self, 参数):
        self.属性 = 参数

对象 = 类(参数)
  • 在第 2 行,在类中定义了一个方法 __init__,该方法被称为构造方法:
    • 方法名的前缀和后缀是两个下划线 _;
    • 方法的第一个参数 self 指向新创建的对象;
    • 方法的其余参数用于设定对象的属性。
  • 在第 3 行,在构造方法中,设定初始化对象的属性;
  • 在第 5 行,使用 “对象 = 类(参数)” 的形式创建一个新的对象,新创建的对象作为 self 参数传递给类的构造方法__init__

2.3 例子

每个人具有 name 和 age 的属性,创建一个类 Person,在类 Person 中定义构造方法__init__,创建对象时设定对象的属性,代码示例如下:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def introduce(self):
        print('name = %s, age = %d' % (self.name, self.age))

tom = Person('tom', 10)
tom.introduce()

jerry = Person('jerry', 20)
jerry.introduce()
  • 在第 1 行,定义了类 Person
    • 在第 2 行,定义了类 Person 的构造方法 __init__
      • __init__ 的 self 参数指向新创建的对象
      • 在第 3 行和第 4 行,初始化对象的 name 和 age
    • 在第 6 行,定义了类 Person 的实例方法 introduce
      • introduce 的 self 参数指向调用 introduce 方法的对象
      • 在第 7 行,输出对象的 name 和 age
  • 在第 9 行,使用类 Person 创建一个对象 tom
    • 新创建对象 tom 时,tom 的属性 name 和 age 为空;
    • 将对象 tom 作为参数传递给类 Person 的构造方法 __init__
    • 在构造方法__init__**设置属性 name 和 age。
  • 在第 12 行,使用类 Person 创建一个对象 jerry
    • 新创建对象 jerry 时,jerry 的属性 name 和 age 为空。
    • 将对象 jerry 作为参数传递给类 Person 的构造方法 __init__
    • 在构造方法__init__**设置属性 name 和 age。

程序运行输出如下:

name = tom, age = 10
name = jerry, age = 20

3. 析构方法

3.1 del 语句

Python 提供了 del 语句用于删除不再使用的变量,del 语句的语法如下:

del 表达式

使用 del 语句删除变量,变量删除后将无法再访问,代码如下:

>>> var = 'hello'
>>> print(var)
hello
>>> del var
>>> print(var)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'var' is not defined
  • 在第 1 行,创建变量 var
    • 在第 2 行,打印变量 var 的值
    • 在第 3 行,正确的输出了
  • 在第 4 行,使用 del 语句删除变量
    • 在第 5 行,打印变量 var 的值;
    • 在第 6 行,因为变量 var 已经被删除了,所以无法访问变量 var,显示错误:name ‘var’ is not defined。

3.2 定义

Python 提供了一种机制使得对象被删除前能够得到通知。对象被删除时,如果该对象拥有名为__del__的方法,该方法在删除前被调用,该方法又被称为析构方法,语法如下:

class 类:
    def __del__(self):
        self.属性
  • 在第 2 行,在类中定义了一个方法__del__,该方法被称为析构方法。
    • 方法名的前缀和后缀是两个下划线 _
    • 方法的参数 self 指向将被删除的对象。

3.3 例子

创建一个类 Person,并定义析构方法__del__,然后使用类 Person 创建两个对象,最后再使用 del 语句删除他们,验证析构方法,代码示例如下:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __del__(self):
        print('del %s' % self.name)

    def introduce(self):
        print('name = %s, age = %d' % (self.name, self.age))

tom = Person('tom', 10)
tom.introduce()

jerry = Person('jerry', 20)
jerry.introduce()

del tom
del jerry
  • 在第 1 行,定义了类 Person
    • 在第 2 行,定义了构造方法__init__
    • 在第 6 行,定义了析构方法__del__
    • 在第 9 行,定义了实例方法introduce
  • 在第 12 行,使用类 Person 创建一个对象 tom;
  • 在第 13 行,使用类 Person 创建一个对象 jerry;
  • 在第 18 行,使用 del 语句删除对象 tom,调用析构方法tom.__del__()
  • 在第 19 行,使用 del 语句删除对象 jerry,调用析构方法jerry.__del__()

程序运行输出如下:

name = tom, age = 10
name = jerry, age = 20
del tom
del jerry
  • 在第 1 行,执行实例方法tom.introduce()输出该行;
  • 在第 2 行,执行实例方法jerry.introduce()输出该行;
  • 在第 3 行,执行tom.__del__()输出该行;
  • 在第 4 行,执行jerry.__del__()输出该行。

以上关于03. Python 类的构造方法、析构方法、实例方法的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

1

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 03. Python 类的构造方法、析构方法、实例方法

发表回复