一、通过“私有属性”实现数据的隐藏
隐藏数据的作用之一可以防止通过对象直接给实例属性赋值的这种方式产生的出错
比如
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()
age不应该是-的,通过设置属性为私有属性
添加额外对属性操作的方法可以解决
二、使用方法
在Python中,如果想要设置为私有的属性,那么仅仅需要在定义属性时在前面加两个下划线即可__
class 类名(object):
def __init__(self):
self.name = "王老师"
self.__age = 18 # 这个属性就是私有属性
这是增加了私有属性的效果
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))
def set_age(self,setage):
if setage>0 and setage<110:
self.__age=setage
# 创建猫对象
cat = Cat("波斯猫", 4)
# 调用方法
cat.print_info()
# 尝试修改属性
cat.set_age(-10)
# 调用方法
cat.print_info()
通过使用方法来进行修改,就可以在方法中进行数据合法性的检查
通过可以将属性变为私有属性,这样就防止了通过对象直接操作属性时可能带来的隐患__
一、通过“私有属性”实现功能函数的隐藏
用来限制方法被外部调用的作用私有方法,但是可以在类的内部被调用
定义方法和上面一样 在函数前加两个下划线即可
class BankService(object):
def __bank_2_bank(self, money):
print("这里是银行之间的转账代码....")
return True
def transfer(self):
money = int(input("请输入转账金额"))
if money > 100000:
if self.__bank_2_bank(money):
print("转账成功")
else:
print("转账失败...")
else:
print("都没钱,还转什么啊!自己留着花吧!")
bank_service = BankService()
bank_service.transfer() # 可以调用,是公有方法
可以发现私有方法__bank_2_bank(self, money):是不可以直接在对象中调用的。