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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值