"私有属性"
实现数据的隐藏class Cat(object): def __init__(self, new_name, new_age): self.name = new_name self.age = new_age def print_info(self): print("我叫%s,今年%s了" % (self.name, self.age)) # 创建猫对象 cat = Cat("波斯猫", 4) # 调用方法 cat.print_info() # 尝试修改属性 cat.age = -10 # 调用方法 cat.print_info()
如果运行上述代码,会发现,第二次输出的信息有误,其为"我交波斯猫,今年-10岁了"
之所以出现这样的错误,究其原因是因为:我们通过对象直接给实例属性赋值的这种方式容易出错
如果在赋值的时候,是通过一个实例方法的调用,在方法中对数据进行严格的检查,合格的数据可以给属性设置,不合格的数据就提醒开发者,这样一来就能够保证数据的准确性了
那该怎样实现呢
答:
想要实现上述阐述的那个功能,我们需要做2件事情
在Python中,如果想要设置为私有的属性,那么仅仅需要在定义属性时在前面加两个下划线__
即可
示例如下
class 类名(object): def __init__(self): self.name = "王老师" self.__age = 18 # 这个属性就是私有属性
既然有了私有属性,那对象能够直接操作它呢?
答:不能,否则就没有私有的作用了
示例如下
class Teacher(object): def __init__(self): self.name = "王老师" self.__age = 18 # 这个属性就是私有属性 t = Teacher() print(t.name) # 能够获取 print(t.__age) # 此时会程序报错,因为__age是私有属性,不能通过对象直接操作
想要实现对私有属性的操作,我们需要定义方法,在方法中操作
示例
class Teacher(object): def __init__(self): self.name = "王老师" self.__age = 18 # 这个属性就是私有属性 def set_age(self, new_age): if 1 <= new_age <= 120: self.__age = new_age print("设置年龄成功") else: print("年龄数据有误...") def get_age(self): return self.age t = Teacher() t.set_age(20) # 设置年龄 print(t.get_age()) # 获取年龄
1.操作属性有2种方法
直接通过对象名修改
对象名.属性名 = 数据
通过方法间接修改
对象名.方法名(数据)
2.通过使用方法来进行修改,就可以在方法中进行数据合法性的检查
3.通过__
可以将属性变为私有属性,这样就防止了通过对象直接操作属性时可能带来的隐患