python @property @*.setter

在python 代码中有时候可以看到如下片段:

    @property
    def tick(self):
        return self._tick

    @tick.setter
    def tick(self, tick):
        self._tick = tick
        self.save_netnode()

片段来自于下面的类定义中

class Core(Module):
.............
    def __init__(self, plugin):
        super(Core, self).__init__(plugin)
        self._project = None
        self._database = None
        self._tick = 0
        self._users = {}

        self._idb_hooks = None
        self._idp_hooks = None
        self._hxe_hooks = None

        self._idb_hooks_core = None
        self._idp_hooks_core = None
        self._ui_hooks_core = None
        self._view_hooks_core = None
        self._hooked = False

    @property
    def project(self):
        return self._project

    @project.setter
    def project(self, project):
        self._project = project
        self.save_netnode()

    @property
    def database(self):
        return self._database

    @database.setter
    def database(self, database):
        self._database = database
        self.save_netnode()

    @property
    def tick(self):
        return self._tick

    @tick.setter
    def tick(self, tick):
        self._tick = tick
        self.save_netnode()
.................................

解读如下:
@property 可以将 python 定义的函数 “当做” 属性访问,从而提供更加友好访问方式,但是有时候setter/deleter也是需要的。

  • 只有 @property 表示只读
  • 同时有 @property 和 @*.setter 表示可读可写
  • 同时有 @property和 @.setter 和 @.deleter 表示 可读可写可删除

简单 demo 如下

zhangji16@zhangji16vm:/tmp$ cat tmp3.py 
#!/usr/bin/env python
# coding=utf-8
class ball(object):

    def __init__(self, b_id = '001'):
        self.__id = b_id

    @property
    def size(self):
        print("here here!!!")
        return self._size

    @size.setter
    def size(self, b_size):
        if type(b_size) != int:
            raise ValueError('size should be an integer!')
        print("size setted!!!")
        self._size = b_size

    @property
    def get_id(self):
        return self.__id

b = ball('002')
b.size = 20
print b.size
print b.get_id
zhangji16@zhangji16vm:/tmp$ python -i tmp3.py 
size setted!!!
here here !!!
20
002

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值