首页 > 编程语言 >Python 访问控制

Python 访问控制

时间:2023-08-12 12:23:18浏览次数:39  
标签:status __ format Python self note 访问控制

Python 访问控制

Java 中采用 public, protected, private 等修饰符来控制访问, Python 则采用命令约定来控制访问,一个下划线_开头表示保护方法,两个下划线__开头表示私有方法
Python 使用 @property 和 property setter 来控制属性的访问

import pytest


class Task:
    def __init__(self, note: str):
        self.note = note
        self._status = "created"

    # public method 公共方法
    def format_note(self) -> str:
        return self.note.title()

    # protected method 保护方法
    def _format_note(self) -> str:
        return self.note.title()

    # private method 私有方法
    def __format_note(self) -> str:
        return self.note.title()

    @property
    def status(self):
        return self._status

    @status.setter
    def status(self, value):
        allowed_values = ["created", "started", "completed", "suspended"]
        if value in allowed_values:
            self._status = value
            print(f"task status set to {value}")
        else:
            print(f"invalid status: {value}")


def test_class_access():
    task = Task(note="python book")
    assert task.format_note() == "Python Book"
    assert task._format_note() == "Python Book"
    with(pytest.raises(AttributeError)):
        assert task.__format_note() == "Python Book"

    # __private_method -> _ClassName__private_method
    # 使用 _ClassName__private_method 访问私有方法
    assert task._Task__format_note() == "Python Book"

标签:status,__,format,Python,self,note,访问控制
From: https://www.cnblogs.com/goallin/p/17624624.html

相关文章

  • 某公司笔试题 - 合并表记录(附python代码)
    #数据表记录包含表索引index和value(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照index值升序进行输出#提示0<=index<=111111111<=value<=100000times=int(input("请输入字典中键值对的个数:"))#定义一个字典dictsdicts......
  • PYTHON 读写CSV
    importcsvdata=[]file1=open("xx2.csv",mode="w")writer=csv.writer(file1)withopen("sc.csv",'r',encoding='utf-8')asfile:reader=csv.DictReader(file)ab=0forrowinreader:data=[]......
  • python 判空 is None 和 if not None 对比
    Thanksforcomments.Ihavetestedtheperformbetweenthese:importtimeitdefusing_is_none(variable):returnvariableisNonedefusing_if_not_none(variable):returnnotvariablevariable=Noneprint("Using'isNone':",......
  • a、IPython
    IPython:超越PythonPython有很多开发环境可供选择,IPython(interactivePython的简称,即交互式Python)由FernandoPerez作为一个增强的Python解释器于2001年启动,并由此发展为一个项目。用Perez的原话来说,该项目致力于提供“科学计算的全生命周期开发工具”。如果将Pytho......
  • Anaconda创建python新环境
    Anaconda创建python新环境1、创建python环境方法一:condacreate-npython3.6(环境名字)python=3.7(版本号)方法二:a.从“开始>anaconda>anacondanavigator”,打开如下配置页面:b.在上述页面左侧列表中选择“Environments>Create”c.打开如下页面:重新命名文件夹名,并选择一......
  • 某公司笔试题 - 取近似值(附python代码)
    #写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于0.5,向上取整;小于0.5,则向下取整。#保证输入的数字在32位浮点数范围内num=input("请输入一个正数:")print(int(float(num)+0.5))......
  • 某公司笔试题 - 质数因子(附python代码)
    #输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举),(如180的质因子为22335)#数据范围1<=n<=2*10**9+14#质数:指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。importmaths=input("请输入一个正整数:")whileTrue:#isdigit函......
  • Mac M1 设置python3到python
    在bash中,我们可以使用如下方式设置全局变量使用whichpython3找到python3的路径,如下sunly@sunlydeMacBook-Air~%whichpython3/Library/Frameworks/Python.framework/Versions/3.11/bin/python3然后在~/.bash_profile中设置对应的重命名aliaspython="/Library/Framew......
  • 某公司笔试题 - 进制转化(附python代码)
    #写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。#数据范围:保证结果在1<=n<=2**31-1hex_str=input("请输入一个十六进制的数:")whileTrue:try:#将十六进制的数转成10进制s=int(hex_str,16)#数据的取值范围[1,214748364......
  • Python 读取 Arduino 串口数据
    serial读取串口数据初始化serimportserialser=serial.Serial('com1',9600,timeout=1)初始化的参数ser=serial.Serial(port=None,#numberofdevice,numberingstartsat#zero.ifeverythingfails,theuser#canspecifyadevicestring,......