python私有属性

2017-06-10  本文已影响0人  壁花烧年
'''
访问私有属性
判断是否是该类型: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')

结果如下:


访问私有属性结果.jpg

私有的属性,为了对外能访问,提供了对外访问的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结果1.jpg

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.jpg

@property成为属性函数,可以对属性赋值时做必要的检查,并保证代码的清晰短小,主要有2个作用
1、将方法转换为只读
2、重新实现一个属性的设置和读取方法,可做边界判定

上一篇 下一篇

猜你喜欢

热点阅读