python中析构函数和封装
目录
一、析构函数
二、封装
隐藏属性
隐藏方法
私有属性
一、析构函数
在Python中,对象的析构函数是__del__
方法。当对象被销毁时(比如对象的引用计数变为0),Python会自动调用该对象的__del__
方法。析构函数可以在对象被销毁前执行一些清理工作,比如释放资源、关闭文件等操作。
以下是一个简单的示例,展示了如何定义一个类并在析构函数中输出一条消息:
class MyClass:
def __init__(self, name):
self.name = name
def __del__(self):
print(f"Object {self.name} is being destroyed")
obj1 = MyClass("obj1")
obj2 = MyClass("obj2")
# 手动删除对象
del obj1
del obj2
在上面的示例中,当手动删除obj1
和obj2
对象时,Python会自动调用对象的__del__
方法,在控制台输出相应的消息。
二、封装
在Python中,封装是面向对象编程中的一个重要概念,它指的是将数据(属性)和行为(方法)封装在类中,并通过接口来控制对这些数据和行为的访问。
在Python中,封装主要通过访问控制和属性(属性和方法)来实现。Python中没有严格的访问控制,但是可以通过以下方法来模拟封装:
-
私有属性和方法:在属性或方法的名称前面加上双下划线
__
,表示该属性或方法是私有的,外部无法直接访问。但是,在Python中并不是真正意义上的私有,它只是将属性或方法名称进行了名称重整(name mangling),实际上还是可以通过一定方式来访问私有属性和方法。 -
属性和方法的命名规范:在属性或方法的名称前面加上单下划线
_
,表示该属性或方法是受保护的,不建议外部直接访问。这种命名规范会告诉其他程序员该属性或方法不应该直接访问。 -
通过公有方法访问私有属性或方法:在类中定义公有方法,通过这些公有方法来访问私有属性或方法,可以在方法内部加入一些逻辑控制。
下面是一个简单的示例,展示了如何在Python中实现封装:
class Person:
def __init__(self, name, age):
self._name = name # protected属性
self.__age = age # private属性
def get_age(self):
return self.__age
def set_age(self, age):
if age > 0:
self.__age = age
# 创建一个Person对象
person = Person("Alice", 30)
# 通过公有方法访问私有属性
print(person.get_age()) # 输出:30
# 尝试直接访问私有属性,会报错
# print(person.__age)
# 通过公有方法修改私有属性
person.set_age(35)
print(person.get_age()) # 输出:35
在上面的示例中,我们定义了一个Person
类,将name
属性设为受保护的(用单下划线表示),将age
属性设为私有的(用双下划线表示)。通过get_age
和set_age
方法来间接访问和修改私有属性__age
。
隐藏属性
第二种方法:在类的内部使用
隐藏方法
私有属性
在Python中,可以使用双下划线__
来定义私有属性。在类中定义一个以双下划线开头的属性,例如__my_private_attr
,就会将其视为私有属性,外部无法直接访问。