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

浅谈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中用于处理字符串的center()方法

    当我们需要将字符串居中输出时,Python中提供了center()方法可以方便地实现字符串的居中输出。下面是这个方法的详细攻略: 标准语法 字符串对象.center(width[, fillchar]) 其中,width是指输出结果的总长度,fillchar为可选参数,表示空白处需要填充的字符,并默认使用空格填充。 示例一 下面是一个简单的示例,展示了cen…

    python 2023年6月5日
    00
  • python做反被爬保护的方法

    针对如何让Python反爬虫,我们可以列举以下几种方法。 1. 设置请求头 Headers 请求头中的User-Agent给出了客户端的相关信息,网站可以根据User-Agent判断请求来自哪里。默认情况下,Python的requests库并不会发送类似于浏览器的请求头信息,这会被很多网站认为是爬虫程序而被拒绝请求。因此在编写Python爬虫时需要添加请求头…

    python 2023年5月14日
    00
  • Python 的字典(Dict)是如何存储的

    Python的字典是一种散列表的实现,它是一个无序的键值对集合,其中可以添加和删除键值对,字典中的键必须唯一且必须是不可变类型(如字符串、元组、数字等),值可以是任何类型,包括列表和其他字典。字典是Python的核心数据类型之一,在实际开发中经常使用。 字典的内部实现 字典的底层是由一个散列表(哈希表)实现的。散列表是一种根据键值直接访问内存位置的数据结构,…

    python 2023年5月13日
    00
  • Python爬虫:Request Payload和Form Data的简单区别说明

    Python 爬虫:Request Payload 和 Form Data 的简单区别说明 在使用 Python 进行爬虫时,我们经常需要发送 POST 请求,并传递一些参数。这些参数可以通过 Request Payload 或 Form Data 的方式传递。以下是 Request Payload 和 Form Data 的简单区别说明。 Request …

    python 2023年5月15日
    00
  • python3 使用traceback定位异常实例

    当 Python 代码运行时,如果发生异常,Python 解释器会在回溯跟踪(traceback)中打印出异常信息与一些调用栈信息,其中包括发生异常的代码位置以及上下文信息等。如果我们能够对这些信息进行分析,就可以快速定位问题所在并修复代码。 在 Python3 中,使用 traceback 模块可以输出回溯信息,并且方便地在代码中获取异常信息。下面是 tr…

    python 2023年5月13日
    00
  • 关于Python 常用获取元素 Driver 总结

    关于Python常用获取元素Driver总结 如果我们要使用Python进行自动化测试或者爬虫相关开发,那么我们必须要掌握如何获取页面元素。本文将总结常用的Python获取元素的方法。 前置条件 在使用以下代码之前,我们需要安装selenium库,并下载对应的浏览器的驱动。 1. 通过ID获取元素 我们可以通过元素的ID进行获取,以下是获取百度首页搜索框元素…

    python 2023年5月20日
    00
  • Python爬虫爬取疫情数据并可视化展示

    Python爬虫爬取疫情数据并可视化展示 本文主要介绍使用 Python 爬虫爬取疫情数据,并使用可视化工具展示数据的过程,适合对 Python 爬虫和数据可视化有一定基础的读者。下面是具体实现方法: 1. 数据获取 Python 爬虫获取疫情数据的方法有很多,这里以爬取丁香园的数据为例。丁香园是一家专业疫情数据网站,提供了各地区、各国家和全球的疫情数据。数…

    python 2023年5月14日
    00
  • 解决Python 中JSONDecodeError: Expecting value: line 1 column 1 (char 0)错误

    当使用Python解析JSON字符串时,如果JSON字符串格式不正确,就会抛出JSONDecodeError错误。其中,常见的错误是Expecting value,表示JSON字符串中缺少值,或者最顶层的数据类型不是列表或字典。 下面是完整的攻略,帮助你解决Python中的JSONDecodeError错误: 1. 检查JSON字符串格式是否正确 检查JSO…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部