python之访问限制

在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。

从Student类的定义来看,外部代码还是可以自由地修改一个实例的namescore属性

# class Student(object):
#     def __init__(self,name,score,ww):
#         self.name=name
#         self.score=score
#         self.ww=ww
#     def prins(self):
#         print('%s:%s:%s'%(self.name,self.score,self.ww))
# bart=Student('wang',99,'yiban')  #输入实例
# bart.name='zhang'#将实例中的wang改为zhang
# bart.prins()

 

如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问

# class Student(object):
#     def __init__(self,name,score,ww):
#         self.__name=name
#         self.__score=score
#         self.__ww=ww
#     def prins(self):
#         print('%s:%s:%s'%(self.__name,self.__score,self.__ww))
# bart=Student('wang',99,'yiban')
# bart.__name='zhang'  #虽然可以运行但不是self.__name=name
 # bart.prins()

 

 

 如果要修改实例的内容可以在类中写一个方法

# class Student(object):
#     def __init__(self,name,score,ww):
#         self.__name=name
#         self.__score=score
#         self.__ww=ww
#     def prins(self):
#         print('%s:%s:%s'%(self.__name,self.__score,self.__ww))
#     def cc(self,gg):
#         self.__name=gg
# bart=Student('wang',99,'yiban')
# bart.cc('zhang')
# bart.prins()

 

 _name是因为Python解释器对外把__name变量改成了_Student__name,所以,仍然可以通过_Student__name来访问__name变量。

但是强烈建议你不要这么干,因为不同版本的Python解释器可能会把__name改成不同的变量名

 

posted @ 2020-12-02 16:57  秋叶落日  阅读(172)  评论(0编辑  收藏  举报