Python中@property的介绍与使用

admin 阅读:60 2024-02-29

由于 Python 语言具有灵活简洁的语法,总能使用一些奇技淫巧来重新装饰一下传统的做法,这种奇技淫巧被称为语法糖,使用@property装饰器来创建只读属性,@property装饰器会将方法转换为相同名称的只读属性,可以与所定义的属性配合使用,这样可以防止属性被修改。

使用@property

我们定义一个类的属性,但是我们要求属性值必须是某个类型或者符合某种条件,这样的话我们每次对该属性进行写的时候, 都要进行检查,这样非常繁琐。

class Human(object):
    def __init__(self, age=0):
        self.age = age

ruhua = Human()
age = input("请调整如花的年龄:")

try:
    age = int(age)
    if age < 0: print("年龄不能为负数,年龄调整失败") else: ruhua.age = age except: print("请输入整数,年龄调整失败") print(ruhua.age)

在面向对象编程中,我们习惯于把这些类型检查或条件检查逻辑放在类中,然后给属性赋予私有特性(防止在类的外部写该属性还要自己写检查), 我们常用的做法是自己写一个 set 函数进行写属性操作,get 函数进行读属性操作。

class Human(object):
    def __init__(self, age=0):
        self.__age = age

    def setage(self, age):
        try:
            age = int(age)
            if age < 0:
                print("年龄不能为负数,年龄调整失败")
            else:
                ruhua.__age = age
        except:
            print("请输入整数,年龄调整失败")

    def getage(self):
        return self.__age

ruhua = Human()
age = input("请调整如花的年龄:")
ruhua.setage(age)
print(ruhua.getage())

把属性设置私有的,让用户通过 get 和 set 来访问属性,这样显然不符合我们 python 语言的高大上的特质, 如果我们能做到把函数变成属性,在访问属性时就是调用函数,这样在函数中我们可以做参数类型检查和条件检查, 就如属性自己做检查一样,Python 提供 @property 关键字可以把函数变成属性。

class Human(object):
    def __init__(self, age=0):
        self.__age = age

    @property
    def age(self):
        return self.__age

    @age.setter
    def age(self, age):
        try:
            age = int(age)
            if age < 0: print("年龄不能为负数,年龄调整失败") else: ruhua.__age = age except: print("请输入整数,年龄调整失败") ruhua = Human() age = input("请调整如花的年龄:") ruhua.age = age print(ruhua.age)

本节重要知识点

要知道传统的做法 get 和 set 的由来。

会灵活使用 @property。

声明

1、部分文章来源于网络,仅作为参考。
2、如果网站中图片和文字侵犯了您的版权,请联系1943759704@qq.com处理!