浅谈python对象数据的读写权限

yizhihongxing

浅谈Python对象数据的读写权限

1. Python的访问控制

在Python中,类的成员变量默认是public类型,但是Python提供了一些装饰器,可以使得我们对成员变量进行访问控制,包括private和protected类型。

  • private类型(双下划线开头):只能在类内部访问,对象和子类都不能直接访问。
  • protected类型(单下划线开头):只能在类内部、对象和其子类中访问。

例如:

class Person:
    def __init__(self, name, age):
        self._name = name
        self.__age = age

p = Person('Alice', 20)
print(p._name)  # protected变量,可以访问
print(p.__age)  # private变量,无法访问

输出结果:

Alice
Traceback (most recent call last):
  File "main.py", line 7, in <module>
    print(p.__age)  # private变量,无法访问
AttributeError: 'Person' object has no attribute '__age'

2. 对象的属性读写权限

Python中的对象拥有__dict__属性,可以查看对象的所有属性,包括方法和成员变量,但是我们无法直接访问这些private或protected类型的变量。

对象数据的读权限

首先,我们来看如何获取对象的成员变量值。

我们可以通过对象的属性方法,如getattr()__dict__来获取public、protected或private类型的成员变量值。

示例:

class Person:
    def __init__(self, name, age):
        self._name = name
        self.__age = age

p = Person('Alice', 20)

# 使用__dict__获取对象的所有成员变量
print(p.__dict__)

# 使用getattr()获取成员变量的值
name = getattr(p, '_name')
age = getattr(p, '_Person__age')  # private数据需要指定方法名
print(name, age)

输出结果:

{'_name': 'Alice', '_Person__age': 20}
Alice 20

对象数据的写权限

其次,我们来看如何修改对象的成员变量值。

  • 对public类型成员变量的修改:我们可以直接通过对象的属性方法修改public类型的成员变量值。
  • 对protected和private类型成员变量的修改:我们可以定义成员变量的setter方法。这些方法可以被外部访问,可以接受传入的参数,并且可以对私有和保护数据进行修改。

示例:

class Person:
    def __init__(self, name, age):
        self._name = name
        self.__age = age

    # 修改私有变量age的setter方法
    def set_age(self, age):
        self.__age = age

p = Person('Alice', 20)

# 直接修改public类型的成员变量
p._name = 'Bob'
print(p._name)

# 通过setter方法修改protected或private类型的成员变量
p.set_age(25)
print(p._Person__age)  # private数据需要指定方法名

输出结果:

Bob
25

结论

通过上述示例,我们可以发现Python是一门难以完全封装的语言,但是我们可以通过各种手段,对代码的功能进行访问控制,从而保证代码的封装性和安全性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈python对象数据的读写权限 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • Python中Json使用示例详解

    Python中Json使用示例详解 本文将详细讲解Python中Json的使用方法。Json是一种轻量级的数据交换格式,常用于Web应用程序中的数据传输。Python中的Json模块提供了丰富的Json数据处理功能,可以方便地将Json数据转换为Python对象,以及将Python对象转换为Json数据。 Json数据转换为Python对象 以下是一个将Js…

    python 2023年5月15日
    00
  • Python中文分词库——jieba的用法

    1.介绍 jieba是优秀的中文分词第三方库。由于中文文本之间每个汉字都是连续书写的,我们需要通过特定的手段来获得其中的每个单词,这种手段就叫分词。而jieba是Python计算生态中非常优秀的中文分词第三方库,需要通过安装来使用它。 jieba库提供了三种分词模式,但实际上要达到分词效果只要掌握一个函数就足够了,非常的简单有效。 安装第三方库需要使用pip…

    python 2023年4月25日
    00
  • Python中BeautifulSoup通过查找Id获取元素信息

    BeautifulSoup是一个Python库,用于解析HTML和XML文档,并提供了一些方便的方法来获取和操作文档中的元素。本文将详细讲解如何使用BeautifulSoup通过查找id获取元素信息,包括两个示例。 步骤一:安装BeautifulSoup 在使用BeautifulSoup之前,需要确保已安装BeautifulSoup库。可以使用以下命令安装B…

    python 2023年5月15日
    00
  • Python自动化办公之Word文件内容的读取

    非常感谢您对 Python 自动化办公的关注!这里提供一份关于 Word 文件内容读取的 完整攻略,希望能对您有所帮助。 前置知识 在 Python 中读取 Word 文件,我们需要用到 python-docx 库进行处理。因此,您需要先安装该库(可以使用 pip 工具进行安装)。 !pip install python-docx 读取 Word 文件内容 …

    python 2023年6月2日
    00
  • Python学习之元组的使用详解

    Python学习之元组的使用详解 简介 元组(tuple)是Python中一种不可变序列,元组中的元素不能对其进行添加、修改、删除等操作。 元组的表示方法是用小括号()将元素括起来,各个元素之间用英文逗号隔开。 例如: t = (1, 2, 3, ‘hello’, ‘world’) 元组的创建和访问 元组可以通过以下两种方式进行创建: 直接通过元素列表创建:…

    python 2023年5月13日
    00
  • python 常见的排序算法实现汇总

    下面是关于“Python常见的排序算法实现汇总”的完整攻略。 1. 排序算法 排序算法是计算机科学中最基本的算法之一,也是Python开发者必须掌握的算法之一。Python中常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。下面将逐一介绍这些算法的实现方法。 1.1 冒泡排序 冒泡排序算法是一种简单的排序算法,它的基本思想是从数据集合的第…

    python 2023年5月13日
    00
  • Python中的numpy.char.add()函数

    接下来我将详细讲解NumPy库中的numpy.char.add()函数。 函数功能 numpy.char.add() 函数是numpy库中的一个字符串拼接函数,用于将两个字符串按元素级别拼接在一起。 这里的按元素级别(element-wise)指的是将两个字符串在对应位置上的字符,按顺序进行拼接。 函数用法 该函数的语法格式如下: numpy.char.ad…

    python-answer 2023年3月25日
    00
  • 详解Node.js和Python的区别

    Node.js和Python都是广泛应用于Web开发领域的编程语言,两者有一些异同点。下面我们来详细讲解Node.js和Python的区别。 1. 语言特性 Node.js Node.js是一种基于事件驱动、非阻塞I/O模型的服务器端JavaScript运行环境。它使用V8 JavaScript引擎,提供高效的性能和轻量级的编程模型,在处理并发I/O操作时表…

    python-answer 2023年3月25日
    00
合作推广
合作推广
分享本页
返回顶部