zoukankan      html  css  js  c++  java
  • 访问可见性问题和@property装饰器

    1、访问可见性问题

    在Python中,属性和方法的访问权限只有两种,也就是公开的和私有的,如果希望属性是私有的,在给属性命名时可以用两个下划线作为开头。如下所示:

      # 私有变量,变量名前面加"__"
      # 如果非要使用私有变量,那么可以使用dir(class())去查看它真正的名字.
      # 私有变量/函数,在类内部可以直接调用.
      # 如果你想体现一个变量/函数特别重要你可以使用"_"

    2、@property装饰器

          之前我们讨论过Python中属性和方法访问权限的问题,我们不建议将属性设置为私有的,而是将属性命名以单下划线开头,通过这种方式来暗示属性是受保护的,不建议外界直接访问,那么如果想访问属性可以通过属性的getter(访问器)和setter(修改器)方法进行对应的操作,这是就考虑使用@property包装器来包装getter和setter方法。如下所示:

      # 使用装饰器的时候,需要注意:
         # 1. 装饰器名,函数名需要一致.
        # 2. property需要先声明,再写setter,顺序不能倒过来
        # 3. 如果你希望一点变量只是被访问不能被修改,那么可以使用访问器@property
        # 4. 如果要修改访问器中的变量,可以搭建一个修改器,或者删除访问器.

    #输入三个数字(私有),求三个数字的和,尝试更改其中两个数字:

    案例一:

      # 显示“小怪兽喜欢奥特曼”

      # 通过输入密码,修改内容

    ------------------------------------------------------------------------------------------------------

    class spacei(object):
      def __init__(self):
        self.__a="小怪兽喜欢奥特曼"
        self.__mima="000000"   # 设置密码
      @property      # 访问器 - getter方法
      def A(self):
        print(self.__a)
      @A.setter     # 修改器 - setter方法
      def A(self,a):
        self.__a=a
      def mima(self):
        print("请输入密码:")
        res=input("")
        if res == self.__mima:   # if语句判断res == self.__mima是否相等,如果相等更改内容
          print("密码输入正确,请更改隐私内容!")
          a=input("")
          self.A=a
          print("内容成功修改为",self.__a)
        else:
          print("密码输入错误,请重新输入:")
          self.mima()
      def wer(self):
        print("你想更改还是退出?")
        we = input("")
        if we == "更改":
          self.mima()
        else:
          pass
    Space=space()
    Space.A
    Space.wer()

    ------------------------------------------------------------------------------------------------------

  • 相关阅读:
    poj1904 King's Quest
    ACM竞赛须掌握的知识 以及 2个版本的POJ推荐 @ NKOJ discuss 转载的
    poj1466
    C++23中设计模式的factory模式
    poj3667 hotel
    poj1505 Copying Books
    在linux系统中安装VSCode(Visual Studio Code)
    Spring_的jar详细说明
    java开发问题总结4Maven使用问题汇总
    线程同步之信号量(sem_init,sem_post,sem_wait)
  • 原文地址:https://www.cnblogs.com/honey-2019/p/11322428.html
Copyright © 2011-2022 走看看