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
又学习到了实例和类都可以动态增加方法和属性。
在此我就有一个疑问。类的动态增加的新方法,可以修改类里的私有属性吗?
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