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
    
  • 相关阅读:
    s 中日期 转换成时间戳 例如2013-08-30 转换为时间戳
    php解析html类库simple_html_dom
    c++关于字符串的读入和截取
    八皇后问题
    激活函数matlab代码
    转:ubuntu添加用户adduser,并给予sudo权限
    shell遍历多个文件夹并进行批量修改文件名
    【转】用win7(64位)远程桌面连接linux(Ubuntu14.04)详细教程
    机器学习-线性回归
    编译gpu集群版caffe
  • 原文地址:https://www.cnblogs.com/amize/p/13255202.html
Copyright © 2011-2022 走看看