首页 Python基础入门视频教程 @property两种方法实现Python只读属性
pay pay

@property两种方法实现Python只读属性

日期: 二月 14, 2023, 8:40 a.m.
阅读: 542
作者: Python自学网-村长

摘要: property操作只读属性,property的用法很广泛,可以通过property把函数当做属性使用,方便快捷而且能提前实现数据处理,不像属性那样简单的赋值。

00:00 / 16:00
1x
2x
1.5x
1.25x
1x
0.8x
0.5x
>
面向对象
    1. 第1课:Python面向对象程序设计
      16分钟
    2. 第2课:类属性和对象属性
      16分钟
    3. 第3课:类属性和对象属性操作本质对比
      16分钟
    4. 第4课:类属性和对象属的区别和使用对比
      16分钟
    5. 第5课:Python类方法的创建
      16分钟
    6. 第6课:实例方法,类方法和静态方法
      16分钟
    7. 第7课:三种方法访问权限对比
      16分钟
    8. 第8课:面向对象基础-元类
      16分钟
    9. 第9课:类属性,私有化属性,受保护属性的访问区别
      16分钟
    10. 第10课:面向对象-属性-私有化属性
      16分钟
    11. 第11课:面向对象-属性-只读属性
      16分钟
    12. 第12课:property操作只读属性
      16分钟
    13. 第13课:属性安全补充
      16分钟
    14. 第14课:内置属性
      16分钟
    15. 第15课:类属性,实例属性,初始化属性
      16分钟
    16. 第16课:面向对象-方法-方法回顾
      16分钟
    17. 第17课:内置特殊方法-对象信息重写
      16分钟
    18. 第18课:内置特殊方法-调用
      16分钟
    19. 第19课:内置特殊方法-索引操作
      16分钟
    20. 第20课:内置特殊方法-切片
      16分钟
    21. 第21课:内置特殊方法-对象比较
      16分钟
    22. 第22课:内置特殊方法-上下文环境的布尔值
      16分钟
    23. 第23课:内置特殊方法-迭代和遍历
      16分钟
    24. 第24课:内置特殊方法-描述器
      16分钟
    25. 第25课:内置特殊方法-装饰器
      16分钟
    26. 第26课:内置特殊方法-对象生命周期
      16分钟
    27. 第27课:内置特殊方法-面向对象小结案例
      16分钟
    28. 第28课:三大特性-继承和继承关系
      16分钟
    29. 第29课:三大特性-资源的继承和使用
      16分钟
    30. 第30课:三大特性-资源的覆盖或累加
      16分钟
    31. 第31课:三大特性-多态
      16分钟
    32. 第32课:面向对象-抽象类
      16分钟

面向对象-属性-property操作只读属性,property的用法很广泛,可以通过property把函数当做属性使用,方便快捷而且能提前实现数据处理,不像属性那样简单的赋值。

# property的用法很广泛,可以通过property把函数当做属性使用,方便快捷而且能提前实现数据处理,不想属性那样简单的赋值
# 1.property第一种使用方法
# 先看文档
class Person:
    def __init__(self):
        self.name = 'Tom'
        self.__money = 100

    def setMoney(self, val):
        if (isinstance(val, int) or isinstance(val, float)) and val >= 0:
            self.__money = val
        else:
            print('请输入正确的金额!')

    def getMoney(self):
        return self.__money

    # money = property(setMoney, getMoney)  # 注意两个参数的顺序不能错
    money = property(getMoney, setMoney)

per = Person()
print(per.money)
per.money = 85  # 这里是重新赋值,不是增减属性
print(per.__dict__)  # {'name': 'Tom', '_Person__money': 85},没有出现新的属性
print(per.money)
# 2.property第二种使用方法
class Person:
    def __init__(self):
        self.name = 'Tom'
        self.__money = 100

    # 先使用property装饰器让__money成为只读属性
    @property
    def money(self):
        return self.__money

    # 看下面文档
    '''
            class C(object):
            @property
            def x(self):
                "I am the 'x' property."
                return self._x
            @x.setter
            def x(self, value):
                self._x = value
            @x.deleter
            def x(self):
                del self._x
    '''
    @money.setter
    def money(self, val):
        self.__money = val

per = Person()
# per.setmoney = 56  # 这样也能设置只读属性
# print(per.__dict__)
# print(per.getmoney)
# 为了方便上面的getmoney和setmoney可以使用同名money
per.money = 56  # 这样也能设置只读属性
print(per.__dict__)
print(per.money)

 

原创视频,版权所有,未经允许,切勿转载,违者必究!
回顶部