【问题标题】:Python letting me access Protected instance attributes outside of classPython让我在类外访问受保护的实例属性
【发布时间】:2021-06-07 00:08:27
【问题描述】:

在这个 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)

【问题讨论】:

  • Python 没有访问修饰符没有访问控制
  • 我以为有?我不知道我是否遗漏了一些东西,但是有很多关于它的 youtube 视频,以及在线资源说有访问修饰符。如果我放一个 __ 前缀,它就会变成“私有”,如果我尝试访问该属性,它会给我一个属性错误。
  • Youtube上有很多错误的视频。 (另外,__ 不是私有的 - 它会激活名称修改。您仍然可以正常访问属性,但更难意外这样做。)

标签: python protected


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 2011-06-06
    • 2017-10-29
    相关资源
    最近更新 更多