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

面向对象编程——私有化属性

一.私有化属性的概念

1.概念:私有化属性是将一些原本公开的属性设置权限,只能小范围访问,其他地方访问不了。这样可以保证数据的安全性,同时提高代码的可维护性。

2.注意:(1)python并没有真正的私有化支持,但是可以使用下划线完成伪私有的效果。

              (2)类属性(方法)和示例属性(方法)遵循相同的规则。

二.私有化属性的访问范围的划分

属性的访问范围一共有4个板块,分别是类内部访问,子类内部访问,模块内其他位置访问,跨模块访问。

1. 类内部访问

        类内部访问是指在类的定义中直接访问属性。无论是公有、受保护还是私有属性,都可以在类内部被访问和修改。

class MyClass:
    def __init__(self):
        self.public_attr = "Public"
        self._protected_attr = "Protected"
        self.__private_attr = "Private"

    def display(self):
        print(self.public_attr)          # 可以访问
        print(self._protected_attr)      # 可以访问
        print(self.__private_attr)       # 可以访问

结论

  • 公有属性:可以访问和修改。

  • 受保护属性:可以访问和修改。

  • 私有属性:可以访问和修改。


2. 子类内部访问

        子类内部访问是指在子类中访问父类的属性。子类可以访问父类的公有和受保护属性,但不能直接访问私有属性(需要通过名称修饰)。

class Parent:
    def __init__(self):
        self.public_attr = "Public"
        self._protected_attr = "Protected"
        self.__private_attr = "Private"

class Child(Parent):
    def display(self):
        print(self.public_attr)          # 可以访问
        print(self._protected_attr)      # 可以访问
        # print(self.__private_attr)     # 报错:AttributeError
        print(self._Parent__private_attr)  # 可以访问,但需要名称修饰

结论

  • 公有属性:可以访问和修改。

  • 受保护属性:可以访问和修改。

  • 私有属性:不能直接访问,但可以通过名称修饰访问。


3. 模块内其他位置访问

        模块内其他位置访问是指在同一个模块中,但不在类或子类内部访问属性。这种访问方式通常用于类的实例化和属性操作。

# 在同一个模块中
obj = MyClass()
print(obj.public_attr)          # 可以访问
print(obj._protected_attr)      # 可以访问(不推荐)
# print(obj.__private_attr)     # 报错:AttributeError
print(obj._MyClass__private_attr)  # 可以访问,但需要名称修饰

结论

  • 公有属性:可以访问和修改。

  • 受保护属性:可以访问和修改(不推荐)。

  • 私有属性:不能直接访问,但可以通过名称修饰访问。


4. 跨模块访问

跨模块访问是指在不同的模块中访问某个类的属性。这种访问方式与模块内其他位置访问类似,但涉及模块的导入。

模块1 (module1.py):

class MyClass:
    def __init__(self):
        self.public_attr = "Public"
        self._protected_attr = "Protected"
        self.__private_attr = "Private"

模块2 (module2.py):

from module1 import MyClass

obj = MyClass()
print(obj.public_attr)          # 可以访问
print(obj._protected_attr)      # 可以访问(不推荐)
# print(obj.__private_attr)     # 报错:AttributeError
print(obj._MyClass__private_attr)  # 可以访问,但需要名称修饰

结论

  • 公有属性:可以访问和修改。

  • 受保护属性:可以访问和修改(不推荐)。

  • 私有属性:不能直接访问,但可以通过名称修饰访问。


总结:属性访问范围的四个板块

访问范围公有属性受保护属性私有属性
类内部访问可以访问和修改可以访问和修改可以访问和修改
子类内部访问可以访问和修改可以访问和修改不能直接访问,但可以通过名称修饰访问
模块内其他位置访问可以访问和修改可以访问和修改(不推荐)不能直接访问,但可以通过名称修饰访问
跨模块访问可以访问和修改可以访问和修改(不推荐)不能直接访问,但可以通过名称修饰访问

三.私有化属性中不同下滑线对应的效果

(1)没有下滑线——公有属性

(2)一个下划线——受保护属性

(3)两个下划线——私有属性


http://www.kler.cn/a/521033.html

相关文章:

  • Python爬虫学习第三弹 —— Xpath 页面解析 实现无广百·度
  • 【Linux】列出所有连接的 WiFi 网络的密码
  • 公式与函数的应用
  • CE-PBFT:大规模联盟区块链的高可用一致性算法
  • 【Elasticsearch 基础入门】Centos7下Elasticsearch 7.x安装与配置(单机)
  • 嵌入式学习笔记-杂七杂八
  • 系统架构设计中的非功能需求分析与设计
  • Spring Boot 中的事件发布与监听:深入理解 ApplicationEventPublisher(附Demo)
  • 用Devc++与easyx一步一步做游戏[启动界面部分]-解决hover闪烁问题及优化
  • Arduino大师练成手册 -- 控制 PN532 NFC 模块
  • 第 25 场 蓝桥月赛
  • 什么是AI Agent?
  • Vue.js 什么是 Vuex?
  • 基于新年视角下的城市人流数据分析
  • Baklib赋能下的内容中台智能化推荐系统解析与展望
  • Mac cursor设置jdk、Maven版本
  • Qt中QVariant的使用
  • 【橘子ES】使用docker搭建ELK环境
  • 2025美赛数学建模C题:奥运奖牌榜模型——思路+代码+模型
  • 二维数组一
  • Linux系统之ifconfig命令的基本使用
  • 2274. 不含特殊楼层的最大连续楼层数
  • 嵌入式C语言:结构体对齐
  • 前部分知识复习01
  • SpringBoot使用 easy-captcha 实现验证码登录功能
  • spring spring-boot spring-cloud发布以及适配