zoukankan      html  css  js  c++  java
  • python 属性相关的property(), @property,__setattr__,__getattr__

    1. _getattr_(self, item):

    在访问对象的item属性的时候,如果对象并没有这个相应的属性,方法,那么将会调用这个方法来处理。
    假如一个对象一个属性:cat.name = "tom",那么在访问cat.name的时候因为当前对象有这个属性,那么将不会调用__getattr__()方法,而是直接返回了拥有的name属性了

    1. _setattr_(self, item, value):

    当试图对象的item特性赋值的时候将会被调用。

    1. property() 函数
    • 语法:
      • property(fget=None, fset=None, fdel=None, doc=None) -> property attribute
    • 说明:
      • fget 是获取属性值的方法。
      • fset 是设置属性值的方法。
      • fdel 是删除属性值的方法。
      • doc 是属性描述信息。如果省略,会把 fget 方法的 docstring 拿来用(如果有的话)
    class Student:
        def __init__(self):
            self._age = None
    
        def get_age(self):
            print('获取属性时执行的代码')
            return self._age
    
        def set_age(self, age):
            print('设置属性时执行的代码')
            self._age = age
    
        def del_age(self):
            print('删除属性时执行的代码')
            del self._age
    
        age = property(get_age, set_age, del_age, '学生年龄')
    
    student = Student()
    # 查看属性的文档字符串:学生年龄
    print('查看属性的文档字符串:' + Student.age.__doc__)
    
    # 设置属性
    student.age = 18
    
    # 获取属性
    print('学生年龄为:' + str(student.age))
    
    # 删除属性
    del student.age
    
    1. @property 装饰器
    • 被 @property 装饰的方法是获取属性值的方法,被装饰方法的名字会被用做属性名。
    • 被 @属性名.setter 装饰的方法是设置属性值的方法。
    • 被 @属性名.deleter 装饰的方法是删除属性值的方法。
    class Student:
        def __init__(self):
            self._age = None
    
        @property
        def age(self):
            print('获取属性时执行的代码')
            return self._age
    
        @age.setter
        def age(self, age):
            print('设置属性时执行的代码')
            self._age = age
    
        @age.deleter
        def age(self):
            print('删除属性时执行的代码')
            del self._age
    
    student = Student()
    
    # 设置属性
    student.age = 18
    
    # 获取属性
    print('学生年龄为:' + str(student.age))
    
    # 删除属性
    del student.age
    
  • 相关阅读:
    [SCOI2005]互不侵犯
    数据结构例题2
    CF1009F Dominant Indices
    BZOJ2054 疯狂的馒头
    数据结构例题1
    HDU5709 Claris Loves Painting
    CF765F Souvenirs
    Luogu P2839 [国家集训队]middle
    Luogu P2154 [SDOI2009]虔诚的墓主人
    计蒜客NOIP模拟赛(2) D2T2紫色百合
  • 原文地址:https://www.cnblogs.com/amize/p/13255202.html
Copyright © 2011-2022 走看看