zoukankan      html  css  js  c++  java
  • python 类私有化

      Python并不直接支持私有方式,而要靠程序员自己把握在外部进行特性修改的时机。毕竟在使用对象前应该知道如何使用。但是,可以用一些小技巧达到私有特性的效果。

      为了让方法或者特性变为私有(从外部无法访问),只要在它的名字前面加上双下划线即可:

    In [6]: class Secretive:
    def __inaccessible(self):
    ...: print "Bet you can't see me..."

    现在__inaccessible从外界是无法访问的,而在类内部还能使用访问:

    1 In [8]: s = Secretive()
    2
    3 In [9]: s.__inaccessible()
    4 ---------------------------------------------------------------------------
    5 AttributeError Traceback (most recent call last)
    6
    7 /home/skyhacker/<ipython console> in <module>()
    8
    9 AttributeError: Secretive instance has no attribute '__inaccessible'

      尽管双下划线有些奇怪,但是看起来像是其他语言中的标准的私有方法。真正发生的事情才是不标准的。类的内部定义中,所有以双下划线开始的名字都被“翻译”成前面加上单下划线和类名的形式。

      在了解了这些幕后的事情后,实际上还是能在类外访问这些私有方法,尽管不应该这么做:

    In [10]: s._Secretive__inaccessible()
    Bet you can't see me...

      简而言之,确保其他人不会访问对象的方法和特性是不可能的,但是这类“名称变化术”就是他们不应该访问这些函数或者特性的强有力信号。



  • 相关阅读:
    1442. Count Triplets That Can Form Two Arrays of Equal XOR
    1441. Build an Array With Stack Operations
    312. Burst Balloons
    367. Valid Perfect Square
    307. Range Sum Query
    1232. Check If It Is a Straight Line
    993. Cousins in Binary Tree
    1436. Destination City
    476. Number Complement
    383. Ransom Note
  • 原文地址:https://www.cnblogs.com/skyhacker/p/2335108.html
Copyright © 2011-2022 走看看