zoukankan      html  css  js  c++  java
  • 访问控制

    访问控制

    访问控制指的是:控制类对象的属性和方法在类对象的外部是否可以直接访问

    如果再类对象的某个属性和方法前添加两个下划线__,那么在类对象的外部就不能直接访问该属性和方法

    #-*-coding:utf-8-*-
    #@author    :vict
    #@Time      :2020-4-1 22:47
    #@File      :test1
    #@software  :PyCharm
    class Myclass(object):
        def __init__(self):
            self.__pia = 18
    
        def __pim(self):
            print("__pim被调用")
    
        def do_sth(self):
            print(self.__pia)
            self.__pim()
    
    mc = Myclass()
    # print(mc.__pia)# AttributeError: 'Myclass' object has no attribute '__pia'
    # mc.__pim() # AttributeError: 'Myclass' object has no attribute '__pim'
    mc.do_sth()
    """
    之所以不能在类对象的外部直接访问以下划线开头的属性或方法,是因为:python解释器对外把
    属性或方法__xxx改成了另外一个名字:_类名__xxx。所以,在类对象的外部仍然可以通过_类名__xxx
    访问属性和方法__xxx。但是,强烈建议不要这样访问。因为不同版本的python解析器可能会把属性或方法
    __xxx改成不同名字。
    """
    print(mc._Myclass__pia)
    print(mc._Myclass__pim())
    # 调用内置函数dir()获得指定对象所有可以访问的属性和方法
    print(dir(mc))
    """
    仍然可以在类对象的外部动态绑定名为__XXX的属性或方法,这与类对象内部名为__xxx的属性和方法
    是不同的
    """
    mc.__pia = "Hi"
    print(mc.__pia)
    
    """
    除了在类对象的属性或方法前添加两个下划线__,还可以在类对象的属性或方法前添加单下划线_,
    这表示:虽然可以在类对象的外部访问该属性或方法,但最好不要访问。
    """
    
    class SomeClass(object):
        def __init__(self):
            self._pia = 18
    
        def _pim(self):
            print("_pim()被调用了")
    
    sc = SomeClass()
    print(sc._pia)
    sc._pim()
    
  • 相关阅读:
    Native RabbitMQ Direct Exchange
    RabbitMQ系列文章导读
    AbstractQueuedSynchronizer
    CountDownLatch和CyclicBarrier
    显示锁Lock
    《SeleniumBasic 3.141.0.0
    《SeleniumBasic 3.141.0.0
    《SeleniumBasic 3.141.0.0
    《SeleniumBasic 3.141.0.0
    《SeleniumBasic 3.141.0.0
  • 原文地址:https://www.cnblogs.com/huanyinglvtuan/p/12637949.html
Copyright © 2011-2022 走看看