美文网首页Python基础
Python:属性的读写删权限

Python:属性的读写删权限

作者: 子休_ | 来源:发表于2018-01-30 21:32 被阅读28次

在编写class中,我们有时会期望部分属性只读,或者只写,或者其他。
只需要使用property就可以做到这一点。

下例中我们使用装饰器,包裹了四个同名函数,但使用中,它们则像一个变量一样。
其中我们控制了:

  • name只允许被赋予 str 类型的值(@property.setter)
  • name不允许被删除(@property.deleter)
  • name允许被获取(@property.getter)
class Person:
    def __init__(self, name):
        self.__name = name

    @property
    def name(self):
        '''绑定属性'''
        return self.__name

    @name.setter
    def name(self, value):
        '''写'''
        if not isinstance(value, str):
            raise TypeError('Expected a string')
        self.__name = value

    @name.deleter
    def name(self):
        '''删'''
        raise AttributeError("Can't delete attribute")

    @name.getter
    def name(self):
        '''读'''
        return self.__name

这些函数除了被使用时当作一个属性,编写过程是完全和普通函数一样的,所以也可以控制一些魔幻的东西,譬如 name 被赋值时,我们可以改变其他属性的值(譬如 性别)。

补充:

无需写全三个方法(.setter, .getter, .deleter),没有定义的方法,会执行默认操作。

  • 评论说的对:上例的.getter可以不写,因为是默认操作方式。

  • 另一种注册方法

class Person:
    def __init__(self, name):
        self.set_name(name)

    def get_name(self):
        return self.__name

    def set_name(self, value):
        if not isinstance(value, str):
            raise TypeError('Expected a string')
        self.__name = value

    def del_name(self):
        raise AttributeError("Can't delete attribute")

    __name = property(get_name, set_name, del_name)

这在代码重构中十分有用,不需要改变原有的api,照样能更新内部的方法。

相关文章

  • Python:属性的读写删权限

    在编写class中,我们有时会期望部分属性只读,或者只写,或者其他。只需要使用property就可以做到这一点。 ...

  • Objective-C 基础 - 属性

    @property 用于声明属性,自动实现属性的读写方法。 属性特质 原子性、读写权限、内存管理语义、方法名、其他...

  • 属性关键字

    属性关键字分类 读写权限 原子性 引用计数 读写权限 readonly readwrite(默认) 原子性 ato...

  • OC语言之属性关键字

    属性关键字 读写权限 readonly readwrite(默认) 原子性 OC中的属性可以修饰成nonatomi...

  • OC属性关键字分析

    属性关键字: 读写权限类属性关键字:readonly 和 readwrite 原子性类属性关键字 : atomic...

  • OC基础知识点梳理

    属性关键字 1. 属性关键字都有哪些? 读写权限readonly(默认)readwrite 原子性atomic(默...

  • iOS 属性关键字

    1. 读写权限 readonly:只读属性; readwrite:可读可写(默认); 2. 原子性 atomic:...

  • 属性

    1.属性关键字有哪些? 原子性--- atomicnonatomic特质 读/写权限---readwrite(读写...

  • 属性关键字

    一.属性关键字的分类? 读写权限:readonly、readwrite(默认) 原子相关:atomic(默认)、n...

  • Linux学习日记-文件与目录管理(四)

    文件与目录的默认权限与隐藏权限 一个文件有若干个属性, 包括读写运行(r, w, x)等基本权限,及是否为目录 (...

网友评论

  • 小混混_f0f2:@name.getter是不用写的,@porperty会自动返回的😶😶😶
    子休_:@小混混_f0f2 但如果我想控制不可读呢。就要用.getter了。

本文标题:Python:属性的读写删权限

本文链接:https://www.haomeiwen.com/subject/wjqhzxtx.html