外部代碼還是可以自由地修改一個(gè)實(shí)例的name炼幔、score屬性
實(shí)例的變量名如果以__開頭鸽心,就變成了一個(gè)私有變量(private)滚局,只有內(nèi)部可以訪問,外部不能訪問
class Student(object):
? ? def __init__(self, name, score):
? ? ? ? self.__name = name
? ? ? ? self.__score = score
? ? def print_score(self):
? ? ? ? print('%s: %s' % (self.__name, self.__score))
如果又要允許外部代碼修改score怎么辦顽频?可以再給Student類增加set_score方法:
class Student(object):
...
? ? def set_score(self, score):
? ? ? ? self.__score = score
>>> bart = Student('Bart Simpson', 98)
>>> bart.get_name()
'Bart Simpson'
>>> bart.__name = 'New Name' # 設(shè)置__name變量藤肢!
>>> bart.__name
'New Name'
表面上看,外部代碼“成功”地設(shè)置了__name變量糯景,但實(shí)際上這個(gè)__name變量和class內(nèi)部的__name變量不是一個(gè)變量嘁圈!內(nèi)部的__name變量已經(jīng)被Python解釋器自動(dòng)改成了_Student__name,而外部代碼給bart新增了一個(gè)__name變量蟀淮。