面向对象编程——私有成员

本文介绍了如何在Python中使用私有变量和方法来保护数据隐私,通过`__`开头的名称使变量成为私有,仅限于类内部访问。类提供了set和get方法以控制对外部的访问。此外,还讨论了类的动态特性可能导致的伪私有属性问题。
摘要由CSDN通过智能技术生成

基础介绍

概念:
保护数据隐私,授权才能访问,类中的变量和方法以__开头命名,则使其变为私有,私有的变量和方法仅能在类的内部使用,类的外部无法调用,只能通过公共方法对其进行处理
示例代码:

class Clerk:
    name = None
    __job = None
    __salary = None

    def __init__(self, name, job, salary):
        self.name = name
        self.__job = job
        self.__salary = salary

    def set_job(self, job):
        self.__job = job

    def get_job(self):
        return self.__job

    def set_salary(self, salary):
        self.__salary = salary

    def get_salary(self):
        return self.__salary


c1 = Clerk('tom', 'python工程师', 20000)
print(c1.name)
print(c1.__job)
print(c1.__salary)


name可以直接访问,但是job和salary由于是私有变量无法直接访问,所以在类的内部提供了对其操作的公共方法set和get方法

运行下方代码:

print(c1.name, c1.get_job(), c1.get_salary())
c1.set_job('java工程师')
c1.set_salary(25000)
print(c1.name, c1.get_job(), c1.get_salary())

在这里插入图片描述
修改成功了,以上是私有成员中的属性,私有方法类似
在这里插入图片描述
在类中定义了私有方法hi,直接调用报错,程序找不到这个方法
因此,需要提供公共方法
在这里插入图片描述

注意事项与细节

类的动态特性,会出现伪私有属性情况

class Clerk:
    name = None
    __job = None
    __salary = None

    def __init__(self, name, job, salary):
        self.name = name
        self.__job = job
        self.__salary = salary

    def get_job(self):
        return self.__job


c1 = Clerk('tom', 'python工程师', 20000)
c1.__job = 'Go工程师'
print(c1.__job)
print(c1.get_job())

运行:
在这里插入图片描述
这是为啥呢?c1.__job让python认为你动态创建了一个__job的公共属性和私有属性不是同一个,我们可以debug一下,看下创建的对象
在这里插入图片描述
这里的才是真正的私有属性全称,单步执行一下
在这里插入图片描述
出现了一个__job,这个属性是后面动态创建的

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值