当前位置: 首页 > news >正文

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

在上面的示例中,当手动删除obj1obj2对象时,Python会自动调用对象的__del__方法,在控制台输出相应的消息。

二、封装

在Python中,封装是面向对象编程中的一个重要概念,它指的是将数据(属性)和行为(方法)封装在类中,并通过接口来控制对这些数据和行为的访问。

在Python中,封装主要通过访问控制和属性(属性和方法)来实现。Python中没有严格的访问控制,但是可以通过以下方法来模拟封装:

  1. 私有属性和方法:在属性或方法的名称前面加上双下划线__,表示该属性或方法是私有的,外部无法直接访问。但是,在Python中并不是真正意义上的私有,它只是将属性或方法名称进行了名称重整(name mangling),实际上还是可以通过一定方式来访问私有属性和方法。

  2. 属性和方法的命名规范:在属性或方法的名称前面加上单下划线_,表示该属性或方法是受保护的,不建议外部直接访问。这种命名规范会告诉其他程序员该属性或方法不应该直接访问。

  3. 通过公有方法访问私有属性或方法:在类中定义公有方法,通过这些公有方法来访问私有属性或方法,可以在方法内部加入一些逻辑控制。

下面是一个简单的示例,展示了如何在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_ageset_age方法来间接访问和修改私有属性__age

隐藏属性

 第二种方法:在类的内部使用

隐藏方法

 

 私有属性

在Python中,可以使用双下划线__来定义私有属性。在类中定义一个以双下划线开头的属性,例如__my_private_attr,就会将其视为私有属性,外部无法直接访问。

相关文章:

  • Spring Boot框架
  • VMware异常记录
  • 【踩坑】修复Idea升级后无法正常使用,报错 java.lang.ClassNotFoundException: com.liceb.b.Z@
  • MySQL InnoDB事务状态详解:information_schema.innodb_trx表解析
  • Neo4j GDS-06-neo4j GDS 库中社区检测算法介绍
  • 7-7 用给定的n个数字构成一个最大素数
  • 函数参数是定义还是赋值
  • 从 Flask 项目打包为多平台 Docker 镜像并上传 Docker Hub(含 GitHub Actions)
  • 需求导向的K8S网络原理分析:Kube-proxy、Flannel、Calico的地位和作用
  • Langchain+NebulaGraph结合大模型的KBQA源码分析
  • C#基础学习(七)函数的重载
  • mac安装talib
  • 2025.03.27【基因分析新工具】| MAST:解锁基因表达差异分析与网络构建
  • 蓝桥与力扣刷题(蓝桥 山)
  • Es6进阶
  • 递归、搜索、回溯算法
  • Linux平台x86_64|aarch64架构RTSP|RTMP直播播放器开发实践
  • 分布式并发控制实战手册:从Redis锁到ZK选主的架构之道
  • 群体智能优化算法-大猩猩部落优化算法(Gorilla Troops Optimizer, GTO,含Matlab源代码)
  • 【深度学习】
  • 泊头网站建设服务/优化网站关键词的技巧
  • 重庆市工程建设招标投标信息网/seo博客网站
  • 甘特图模板关于网站建设/怎么建个网站
  • 域名备案关闭网站/百度排名优化咨询电话
  • 区块链 网站 怎么做/网络营销技能大赛优秀作品
  • dz论坛网站建设/怎样创建自己的电商平台