如何保护类的属性?
(1)、把属性定义为私有属性,即在属性名的前面加上两个下划线;
(2)、添加用于设置或者获取属性值的两个方法供外界调用。
如果有一个对象,当需要对其进行修改属性时,有2种方法
- 对象名.属性名 = 数据 ---->直接修改
- 对象名.方法名() ---->间接修改
为了更好的保存属性安全,即不能随意修改,一般的处理方式为
- 将属性定义为私有属性
添加一个可以调用的方法,供调用
1.单下划线
变量前的单下划线表示表面上私有 ,但是其实这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。
2.双下划线
变量前的双下划线表示真正的私有,实际上的私有,只有内部可以访问,外部不能访问
但是有窍门,可以在类里面增加get__namedede和set__namedede这样的方法来突破限制,而且还能在方法里做验证。
类的三种属性
1.共公属性:允许随意访问 self.name=name
2.受保护的属性:允许直接访问,但不建议直接访问 self._age=age
3.私有属性:拒绝直接访问 self.__job=job
所有权限相关设置在类内都不受影响。
一般受保护的属性是通过方法进行访问
class Dog(object):
def __init__(self,name,age,job):
self.name=name
self._age=age
self.__job=job
def set_age(self,age):
return self._age=age
def get_age(self):
return self._age
私有的属性一般是拒绝访问的
class Dog(object):
def __init__(self,name,age,job):
self.name=name
self._age=age
@property
def job(self):
return self.__job
正常情况下调用方法需要dog.job()# 加上@property以后,调用方法就不需要加括号了,直接dog.job# 只要出现这样的写法,在外部调用.job就不是访问job属性,而是调用job()方法
如果设置了@property访问属性,就可以继续设置修改属性的写法
class Dog(object):
def __init__(self,name,age,job):
self.name=name
self._age=age
@property
def job(self):
return self.__job
@job.setter
def job(self,job)
if job=="code":
print('no')
else:
self.__job=job