python 公有屬性和私有屬性

十三、python 公有屬性和私有屬性

屬性

方法:

class Chinese(Person):

nation = 'China'

def __init__(self,name):

self.__name = name

def msg(self):

print self.name

屬性:

-類屬性

-實例屬性

屬性的可見性:

-公有屬性

-私有屬性

class Chinese(Person):

nation = 'China'  #類屬性

def __init__(self,id,name):

self.id = id #公有屬性

self.__name = name #實例屬性,私有屬性

def msg(self):

print self.name

私有屬性:

python並沒有真正的私有屬性

__定義的屬性,只是被改名換姓而已

_定義的屬性,意義在於喚起用戶的注意,看成私有屬性

 

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

class Chinese(object):

    nation = 'Chain'

 

    def __init__(self, id, name):

        self._id = id

        self.__name = name

 

    def sayHi(self, msg):

        print self.__name,msg

 

 #定義實例

aidon = Chinese(1,'aidong')

bajie = Chinese(2,'bajie')

#通過類看類屬性

Chinese.nation

#通過實例看類屬性

aidon.nation

 

#通過類修改類屬性

Chinese.nation=u'中國'

#再次查看

Chinese.nation

aidon.nation

bajie.nation

 

#通過實例修改類屬性(只對該實例管用):儘量不用實例對象修改類屬性

aidon.nation='Chain'

 

#查看實例字典

aidon.__dict__

 

#修改實例屬性(_)的值(_id感覺是點沒有被保護,底層也沒有改名換姓)

aidon._id

aidon._id = 100  #是否能修改該實例對象的私有屬性值(可以)

aidon._id

 

#修改實例屬性(__)的值(__name感覺是點被保護,底層其實是改名換姓)

bajie.__name

bajie.__name = "tangzeng" #該方式修改是不對的 (相當於是新增咯)

bajie._Chinese__name = 'wukong'  #這樣纔可以,我們定義實例屬性是__name,但是壓根被python改咯個名字,規律是:_classname__propertyname

 

#調用方法:

aidon.sayHi("hello aidon")

 

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

怎麼真正來操作(讀寫刪除)屬性呢?要直接訪問屬性就違背面向對象封裝原則

發佈了49 篇原創文章 · 獲贊 60 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章