一、构造函数
构造函数是一种特殊的类成员方法,主要用来在创建对象时初始化对象,即为对象成员变量赋初始值。Python 中的类构造函数用 __init__ 命名,为 MyClass 添加构造函数方法,并实例化一个对象。
class MyClass(object):
message = "数据云团"
def __init__(self):
print("初始化")
def show(self):
print(self.message)
inst = MyClass()
inst.show()
构造函数在 MyClass 被实例化时被 Python 解释器自动调用。
如果需要多种方式构造对象,则可通过默认参数的方式实现:
class MyClass(object):
message = "数据云团"
def __init__(self, name="unset", color="black"):
print("初始化:", name, color)
def show(self):
print(self.message)
inst = MyClass()
inst.show()
inst2 = MyClass("小团")
inst2.show()
inst3 = MyClass("小团子", "Yellow")
inst3.show()
inst4 = MyClass(color="Green")
inst4.show()
上述代码中定义了 4个构造函数,分别接收 0、1、2个构造参数,之后分别通过不同的构造参数构造实例。
Python 中不能定义多个构造函数,但可以通过为命名参数提供默认值的方式达到用多种方式构造对象的目的。
二、析构函数
析构函数是构造函数的反向函数,在销毁对象时将调用它们。析构函数往往用来做“清理善后”的工作,例如数据库链接对象可以在析构函数中释放对数据库资源的占用。
Python 中为类定义析构函数的方法是在类中定义一个名字为 __del__ 的没有返回值和参数的函数。
与 Java 类似,Python 解释器的堆中存储着正在运行的应用程序所建立的所有对象,但是它们不需要程序代码来显式的释放,因为 Python 解析器会自动跟踪它们的引用计数,并自动销毁已经没有被任何变量引用的对象。Python 提供了显式销毁对象的方法:使用 del 关键字。
class MyClass(object):
message = "数据云团"
def __init__(self, name="unset", color="blank"):
print("初始化:", name, color)
def __del__(self):
print("释放")
def show(self):
print(self.message)
inst = MyClass()
inst.show()
inst2 = MyClass("小团")
inst2.show()
# 用 del 释放对象时析构函数会自动被调用
del inst, inst2
inst3 = MyClass("小团子", "Yellow")
inst3.show()
# 用 del 释放对象时析构函数会自动被调用
del inst3
三、实例成员变量
之前的例子中,MyClass 类中的成员变量 message 是类成员变量,即 MyClass 类和所有 MyClass 对象共享该成员变量。
那么如何定义属于每个对象自己的成员变量呢?
在函数中定义 self 引用中的变量,这样的成员变量在 Python 中叫做实例成员变量。
class MyClass(object):
message = "数据云团"
def __init__(self, name="unset", color="black"):
print("初始化:", name, color)
self.name = name
self.color = color
def __del__(self):
print("释放")
def show(self):
print(self.message)
print("实例成员变量:", self.name, self.color)
inst2 = MyClass("小团")
inst2.show()
inst3 = MyClass("小团子", "Yellow")
inst3.show()
# 用 del 释放对象时析构函数会自动被调用
del inst2, inst3
在构造函数 __init__ 中定义了两个实例成员变量:self.name 和 self.color;在 MyClass 的成员函数中可以直接使用这两个成员变量,通过实例名也可以访问到实例成员变量。