'''
访问私有属性
判断是否是该类型:isinstance(10,str)
'''
class Money(object):
def __init__(self):
self.__money = 0
def getMoney(self):
return self.__money
def setMoney(self, value):
#判断value的值是不是整型
if isinstance(value, int):
self.__money = value
else:
print("error:不是整型数字")
m1 = Money()
print(m1.getMoney())
m1.setMoney(100)
print(m1.getMoney())
m1.setMoney('i')
结果如下:
私有的属性,为了对外能访问,提供了对外访问的set和get方法。但是对于使用的时候略显繁琐,使用ret = property(get,set)
当对象获取ret时,相当于调用get方法,当对象设置ret时,相当于调用set,将设置的值传给set的方法作为实参。
class Money(object):
def __init__(self):
self.__money = 0
def getMoney(self):
return self.__money
def setMoney(self, value):
if isinstance(value, int):
self.__money = value
else:
print("error:不是整型数字")
money = property(getMoney, setMoney)
m1 = Money()
print(m1.money)
m1.money = 100
print(m1.money)
结果如下:
property第二种表示方法:
class Money(object):
def __init__(self):
self.__money = 0
@property
def money(self):
return self.__money
@money.setter
def money(self, value):
if isinstance(value, int):
self.__money = value
else:
print("error:不是整型数字")
m1 = Money()
print(m1.money)
m1.money = 100
print(m1.money)
结果如下:
@property成为属性函数,可以对属性赋值时做必要的检查,并保证代码的清晰短小,主要有2个作用
1、将方法转换为只读
2、重新实现一个属性的设置和读取方法,可做边界判定