使用get-set-del方法操作私有成员
- class obj:
- def __init__(self,name):
- self.name=name
- def prin(self):
- print self.name
- __age = 18
- # 加上双下划线的就是私有变量,只能在类的内部访问,外部无法访问
- @classmethod
- # 如果要在类中调用,首先调用类方法
- def pri(cls):
- print cls.__age
- # 然后在使用
- @classmethod
- def set_age(cls,value):
- cls.__age = value
- return cls.__age
- # 这个用法就是改变__age的值
- @classmethod
- def get_age(cls):
- return cls.__age
- # 这个用法就是直接返回__age的值
- @classmethod
- def del_age(cls):
- del cls.__age
- # 这个用法就是直接删除__age的值
-
- print obj.get_age()
- # 这里是直接调用出__age的值 返回值18
- print obj.set_age(20)
- # 这里是直接改变__age的值 返回值20
- obj.del_age()
- # 这里是直接删除__age的值
思考: 既然是私有变量,不让外部访问,为何有要在后面调用又改变呢?因为可以对私有变量进行额外的检测,处理,加工等等。比如判断value的值,使用isinstance然后做if-else判断。
使用私有变量可以对内部变量进行保护,外部无法改变,但是可以对它进行检测处理。
这里引申一下私有成员的保护机制,使用__age对私有变量其实就是—>obj._obj__age的样子进行保护,说白了你直接使用obj._obj__age就可以直接调用内部私有变量age了。
Propety装饰器
把类的方法伪装成属性调用的方式,就是把类里面的一个函数,变成一个属性一样的东西~
一开始调用类的方法要使用圆括号,现在变成了属性进行读取设置存储。
举个例子来说明:
常用的调用方法
- class obj:
- def __init__(self,name,age):
- self.__name=name
- self.__age=age
- # 讲这些设置成私有变量
- def get_age(self):
- return self.__age
- def set_age(self,value):
- if isinstance(value,int):
- self.__age=value
- else:
- raise ValueError('非整数类型')
- def del_age(self):
- print 'delete over'
- a = obj('langzi',18)
- print a.get_age()
- a.set_age(20)
- print a.get_age()
使用装饰器
- class obj:
- def __init__(self,name,age):
- self.__name=name
- self.__age=age
- # 把这些设置成私有变量
- @property
- def age(self):
- return self.__age
- @age.setter
- def age(self,value):
- if isinstance(value,int):
- self.__age=value
- else:
- raise ValueError('非整数类型')
- @age.deleter
- def age(self):
- print 'delete over'
- a = obj('langzi',18)
- # 使用这些装饰器,可以使用类与对象的方法直接调用
- print a.age
- # 这里就是直接调用返回age的值
- a.age=20
- # 这里就是直接使用setter把值转换
- print a.age
- del a.age
- # 删除age
当然这种调用方法有些麻烦,每次都是一个一个去实例类与对象,有个更加简单直观的方法。
更加减半的使用property()函数 (编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|