python類的動態方法是否可以訪問到私有變量。

python的類,類的私有屬性__attr。私有屬性只能通過類的方法來訪問。

又學習到了實例和類都可以動態增加方法和屬性。

在此我就有一個疑問。類的動態增加的新方法,可以修改類裏的私有屬性嗎?


class Student(object):
    def __init__(self,name,score):
        self.__name=name;
        self.__score=score;
        self.__grade=3;##這是私有的屬性
        self.grade=3; ##這是公有的。

    def show_grade(self):
        print("%s __grade=%d"% (self.__name,self.__grade));
        print("%s grade=%d"% (self.__name,self.grade));
        

lisa=Student("lisa",88);
mona=Student("mona",82);
def set_grade(self,grade):
    self.__grade = grade; ##實測發現,此函數調用後__grade 還是原值。__grade是私有變量。只能被class裏的“靜態方法”來修改。
    self.grade = grade;   ##此函數調用後,grade的值被修改了。grade是公開變量。可以被動態方法來修改。
        #print("%s grade is %d"% (self.__name, self.grade));# 在這裏訪問不到self.__name,所以把此句註釋掉了。
        
Student.setGrade = set_grade;
lisa.setGrade(4);
lisa.show_grade();


結果如下:
lisa __grade=3
lisa grade=4   

結論:
爲類動態增加的方法,對類裏私有屬性沒有讀與寫的權限。
參考:
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318650247930b1b21d7d3c64fe38c4b5a80d4469ad7000
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章