Python 私有属性和私有方法应用场景分析
类的私有属性和方法
Python是个开放的语言,默认情况下所有的属性和方法都是公开的或者叫公有方法,不像C++和Java中有明确的public,private关键字来区分私有公有。
Python默认的成员函数和成员变量都是公开的,类的私有属性指只有在类的内部使用的属性或方法,表现形式为以“__“属性名或方法名以双下划线开头。
classTest(object): __count=0#私有属性__count defget_count(self): returnself.__count#类的内部可以使用私有属性 defset_count(self,value): ifself.__check_value(value):#在类的内部调用类的私有方法 self.__class__.__count=value def__check_value(self,value):#定义类的私有方法检查参数 ifisinstance(value,int): returnTrue a=Test() print(a.get_count()) a.set_count(100) print(a.get_count()) #a.__check_value(10)#调用私有方法会报错 #print(a.__count) #直接访问私有属性也会报错
应用场景
对于一些敏感的数据,我们不希望直接被的函数调用,或者不希望草率的直接object.key=value来修改,我们可以选择将属性声名为私有的,这样从外部时无法访问该属性的,也就不能修改了,但是依然可以修改属性字典的方法来修改。
#当然可以使用@proprety classPerson(object): __name='Monkey' defupdate_name(self,name): self.__name=name defget_name(self): returnself.__name p=Person() p.update_name('BlackMonkey') print(p.get_name())#BlackMonkey print(p.__name)#报错AttributeError:'Person'objecthasnoattribute'__name'
下面在看下python中私有属性和受保护的属性的实例代码
具体代码如下所示:
classPeople: def__init__(self,name,age): self.name=name self.age=age self._protect_var=10#受保护的成员,使用一个下划线_,它仅仅是提示成员受保护,但可以被更改 self.__private_var=10#使用双下划线__可以定义私有属性 defsayhi(self): print("Hi,mynameis{},andI'm{}".format(self.name,self.age)) defget_var(self): print(self.__private_var) defset_var(self,var): self.__private_var=var #classinstance类的实例化 someone=People(name='Jack',age=20)#类的实例化 print(someone._protect_var)#10受保护的成员可以被打印 someone._protect_var=20#受保护的成员可以被修改 print(someone._protect_var)#20可以被修改 #print(someone.__private_var)#报错AttributeError:'People'objecthasnoattribute'__private_var' someone.__private_var=30#此处可以被修改,不会报错(此处表示私有属性可以被修改,具体原因可以百度) print(someone.__private_var)#可以打印,不会报错 someone.get_var()#10此处可以发现,__private_var在上面被改成30,但此处打印出来却是10(具体原因可以百度) someone.set_var(40) someone.get_var()#40这里通过someone.set_var(40)改成了40 print(dir(someone))#dir()打印出someone这个对象支持的属性和方法 #['_People__private_var','__class__','__delattr__','__dict__','__dir__','__doc__','__eq__','__format__','__ge__','__getattribute__','__gt__','__hash__','__init__','__init_subclass__','__le__','__lt__','__module__','__ne__','__new__','__private_var','__reduce__','__reduce_ex__','__repr__','__setattr__','__sizeof__','__str__','__subclasshook__','__weakref__','_protect_var','age','get_var','name','sayhi','set_var'] #在类的内部重命名了__private_var重命名成_People__private_var someone._People__private_var=100 someone.get_var()#100通过_People__private_var把__private_var的值改成了100
总结
到此这篇关于Python私有属性和私有方法应用场景分析的文章就介绍到这了,更多相关python私有属性和私有方法内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!