Python 如何隱藏屬性


定義:

  顧名思義就是隱藏類及對象的屬性,通過__兩個下划線定義的屬性則為隱藏屬性,但是這種隱藏也只是語法上的隱藏,可以通過__dict__來進行查看,然后進行調用,聲明的隱藏屬性都會在聲明時進行轉化

事例:

#先看如何隱藏
class Foo:
    __N=111111 #_Foo__N  聲明的隱藏屬性
    def __init__(self,name):
        self.__Name=name #self._Foo__Name=name

    def __f1(self): #_Foo__f1
        print('f1')
    def f2(self):
        self.__f1() #self._Foo__f1()

f=Foo('egon')#這種是調不到的
print(f.__N)
f.__f1()#這種是調不到的
f.__Name
f.f2() 

注意:

#1:這種隱藏只是一種語法上變形操作,並不會將屬性真正隱藏起來
print(Foo.__dict__)
print(f.__dict__)
print(f._Foo__Name)
print(f._Foo__N)

#2:這種語法級別的變形,是在類定義階段發生的,並且只在類定義階段發生
Foo.__x=123123123123123123123123123123123123123123
print(Foo.__dict__)
print(Foo.__x)
f.__x=123123123
print(f.__dict__)
print(f.__x)

#3:在子類定義的__x不會覆蓋在父類定義的__x,因為子類中變形成了:_子類名__x,而父類中變形成了:_父類名__x,即雙下滑線開頭的屬性在繼承給子類時,子類是無法覆蓋的。
class Foo:
    def __f1(self): #_Foo__f1
        print('Foo.f1')

    def f2(self):
        self.__f1() #self._Foo_f1

class Bar(Foo):
    def __f1(self): #_Bar__f1
        print('Bar.f1')

b=Bar()
b.f2()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM