跳至主要內容

私有属性和私有方法

刘春龙原创...大约 2 分钟Python教程文档

Python 对于类的成员没有严格的访问控制限制,这与其他面向对象语言有区别。关于私有属性和私有方法,有如下要点:

  1. 通常我们约定,两个下划线开头的属性是私有的(private)。其他为公共的(public)。
  2. 类内部可以访问私有属性(方法)
  3. 类外部不能直接访问私有属性(方法)
  4. 类外部可以通过_类名__私有属性(方法)名”访问私有属性(方法)

注意

方法本质上也是属性!只不过是可以通过()执行而已。

所以,此处私有属性和私有方法的使用基本一致。

私有属性

class Employee:
    count = 26  # 公有类属性
    __company = "WEB"  # 私有类属性

    def __init__(self, name, age):
        self.name = name  # 公有实例属性
        self.__age = age  # 私有实例属性

    def say_company(self):
        print(f"我的公司是:{Employee.__company}")  # 类内部可以直接访问私有类属性
        print(f"{self.name}的年龄是:{self.__age}")  # 类内部可以直接访问私有实例属性


p1 = Employee("小米", 32)
print(Employee.count)    # 类外部直接访问公有类属性
print(p1.name)  # 类外部直接访问公有实例属性

print(Employee._Employee__company)  # 外部强行访问私有类属性
print(p1._Employee__age)  # 外部强行访问私有实例属性

私有方法

class Employee:
    count = 26
    __company = "WEB"

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

    def __say_work(self):  # 私有实例方法
        print(f"我的公司是:{Employee.__company}")
        print(f"{self.name}的年龄是:{self.__age}")

    def say_company(self):  # 公有实例方法
        print(f"我的公司是:{Employee.__company}")
        print(f"{self.name}的年龄是:{self.__age}")
        self.__say_work()    # 类内部直接调用私有实例方法


p1 = Employee("小米", 32)
p1.say_company()  # 类外部直接访问公有实例方法
p1._Employee__say_work()  # 外部强行访问私有实例方法
上次编辑于:
贡献者: 刘春龙
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.7