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()
程序运行输出如下:
name = tom, age = 10
name = jerry, age = 20
2. 构造方法
2.1 为什么需要构造方法
在前面的演示实例方法的程序中,创建了两个对象 tom 和 age,创建对象后需要设置属性的初始值,具体的过程如下所示:
在初始化对象属性时,存在一个明显的问题:初始化 tom 的代码块和初始化 jerry 的代码块是类似和重复的。Python 提供了一个特殊的方法:构造方法,该方法用于初始化对象属性,用于解决这个问题。
2.2 定义
构造方法是用于初始化对象属性的方法,语法如下:
class 类:
def __init__(self, 参数):
self.属性 = 参数
对象 = 类(参数)
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()
程序运行输出如下:
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
3.2 定义
Python 提供了一种机制使得对象被删除前能够得到通知。对象被删除时,如果该对象拥有名为 __del__ 的方法,该方法在删除前被调用,该方法又被称为析构方法,语法如下:
class 类:
def __del__(self):
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
程序运行输出如下:
name = tom, age = 10
name = jerry, age = 20
del tom
del jerry
作者:Json19970108018