Python让我在类之外访问受保护的实例属性

问题描述

在这个 Python 程序中,我创建了一个 Employee 类,它有一个受保护的实例属性“_id”。我的理解是,在 Python 中,要创建受保护的属性,您需要以单个下划线开头的名称。但是,它允许我在类之外访问这个受保护的属性。这个程序的输出是: 12345

为什么要这样做?对不起,如果这是一个愚蠢的问题!我找不到任何解释正在发生的事情或我做错了什么的任何地方。

class Employee:

    def __init__(self,full_name,ID = 0):
        self._firstname,self._lastname = full_name.split(" ")
        self._id =  ID

    @property
    def firstname(self):
        return self._firstname
    
    @property
    def id(self):
        return self._id
    
    @firstname.setter
    def firstname(self,new):
        self._firstname = new
    
    @id.setter
    def id(self,new):
        self._id = new

    @firstname.deleter
    def firstname(self):
        self._firstname = None
    
    @id.deleter
    def id(self):
        _id = None



bob = Employee("Billy Bob",12345)

print(bob._id)

解决方法

谢谢。我现在明白下划线只是约定俗成。我对认为存在访问修饰符感到困惑,因为当我将约定用于私有属性“__”时,它不会让我从外部访问该属性。它不允许我访问它的原因是名称修改。