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

你可能感兴趣的:(高级语言)