6.3Python面向对象(3):类的私有成员

@什么是类的私有成员

  • 成员就是指类的属性和方法;
  • 私有,即不能再类的外界进行访问;
  • 目的是为了保障安全,如涉及隐私的属性、核心方法实现等;

@案例,需求如下

  • 创建Person类,添加存款信息
  • 保护存款信息,将其设置为私有
  • 为存款信息添加保护,使其不能被直接访问
  • 增加设置密码功能 ·增加存款查询功能
  • 只有输入密码正确的情况下才能查询存款信息
class Person:
    # 公有属性
    name = "林阿华"
    age = 20

    # 私有属性(须通过公有方法来访问)
    __rmb = 1000

    # 私有方法:设置存款
    def __setrmb(self,rmb):
        self.__rmb = rmb

    # 通过公开方法访问私有方法进行存款设置
    def setrmb(self,rmb):
        pwd = input("请输入设置密码:")
        if (pwd == "123456"):
            self.__setrmb(rmb)
        else:
            print("您没有权限,fuck off")

    # 公开一个方法,共外界访问私有属性self.__rmb
    def getrmb(self):
        pwd = input("请输入查询密码:")
        if (pwd == "123456"):
            return self.__rmb
        else:
            return "您没有访问权限"

    # 公有方法
    def tell(self):
        print("大家好,我是%s"%(self.name))

代码说明:

  • 代码中的__rmb属性、__setrmb方法都是私有的,在类的外部是无法进行直接访问的;
  • 任何前置两个下划线的成员(属性与方法)都是私有的,只能在类的内部进行访问;
  • 外界访问私有成员的方法是,使用公有方法对外界提供私有成员访问接口,但在内部先行进行权限校验,如输入密码等,如本例中的setrmb方法和getrmb方法;

创建Person实例,并通过公有方法访问私有成员

    p = Person()
    print(p.name)
    print(p.age)

    # 私有成员不能被直接访问
    # print(p.__rmb)#AttributeError: 'Person' object has no attribute '__rmb'

    # 访问公有方法
    p.tell()
    p.setrmb(500)#通过公有方法访问私有方法
    rmb = p.getrmb()
    print("我的存款是:",rmb)

执行结果如图
6.3Python面向对象(3):类的私有成员_第1张图片

你可能感兴趣的:(Python,语言程序设计)