Python高级property属性详解

Posted ZSYL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python高级property属性详解相关的知识,希望对你有一定的参考价值。

property属性

  • 能够知道装饰器方式的property属性的定义方式

1. property属性的介绍

property属性就是负责把一个方法当做属性进行使用,这样做可以简化代码使用。

定义property属性有两种方式

  1. 装饰器方式
  2. 类属性方式

2. 装饰器方式

class Student(object):
    def __init__(self):
        # 私有属性
        self.__age = 0

    @property  # 当对象调用age属性的时候会执行下面的方法
    def age(self):
        print("获取属性啦")
        return self.__age

    @age.setter  # 当对象调用age属性设置值的时候会调用下面的方法
    def age(self, new_age):
        print("设置属性啦")
        if new_age >= 0 and new_age <= 130:
            self.__age = new_age
        else:
            print("成精啦")


# 提示: 使用装饰器方式的property属性那么方法名要保持一致

student = Student()
age = student.age
print(age)

student.age = 20

age = student.age
print(age)

运行结果:

获取属性啦
0
设置属性啦
获取属性啦
20

代码说明:

  • @property 表示把方法当做属性使用, 表示当获取属性时会执行下面修饰的方法
  • @方法名.setter 表示把方法当做属性使用,表示当设置属性时会执行下面修饰的方法
  • 装饰器方式的property属性修饰的方法名一定要一样。
  • __属性名定义私有属性,没有构造gettter/setter不能直接对象.获取属性:AttributeError: 'Student' object has no attribute 'age'

3. 类属性方式

class Student(object):
    def __init__(self):
        # 私有属性
        self.__age = 0

    def get_age(self):
        print("获取属性啦")
        return self.__age

    def set_age(self, new_age):
        print("设置属性啦")
        if new_age >= 0 and new_age <= 130:
            self.__age = new_age
        else:
            print("成精啦")

    # 1. get_age 表示获取age属性的时候执行的方法
    # 2. set_age 表示设置age属性的时候执行的方法
    age = property(get_age, set_age)


student = Student()
age = student.age
print(age)

student.age = 20

age = student.age
print(age)

运行结果:

获取属性啦
0
设置属性啦
获取属性啦
20

代码说明:

  • property的参数说明:
    • 第一个参数是获取属性时要执行的方法
    • 第二个参数是设置属性时要执行的方法

4. 小结

  • 定义property属性有两种方式:
    1. 装饰器方式
    2. 类属性方式
  • 装饰器方式:
    1. @property 修饰获取值的方法
    2. @方法名.setter 修饰设置值的方法
  • 类属性方式:
    1. 类属性 = property(获取值方法, 设置值方法)

加油!

感谢!

努力!

以上是关于Python高级property属性详解的主要内容,如果未能解决你的问题,请参考以下文章

Python面向对象高级编程:@property--把方法变为属性

Python进阶之“属性(property)”详解

Python进阶之“属性(property)”详解

python @property使用详解

Python class的属性访问控制和内建函数重写实现高级功能以及@property

Python面向对象高级编程-@property