python 公有屬性和私有屬性
- 2020 年 1 月 13 日
- 筆記
十三、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")
————————————————————
怎麼真正來操作(讀寫刪除)屬性呢?要直接訪問屬性就違背面向對象封裝原則