4

我有一个类定义

class A(object):
    def __init__(self):
        self.content = u''
        self.checksum = hashlib.md5(self.content.encode('utf-8'))

现在,当我更改self.content时,我希望self.checksum会自动计算。我想象中的东西会是

ob = A()
ob.content = 'Hello world' # self.checksum = '3df39ed933434ddf'
ob.content = 'Stackoverflow' # self.checksum = '1458iabd4883838c'

有什么神奇的功能吗?还是有任何事件驱动的方法?任何帮助,将不胜感激。

4

1 回答 1

8

使用 Python @property

例子:

import hashlib

class A(object):

    def __init__(self):
        self._content = u''

    @property
    def content(self):
        return self._content

    @content.setter
    def content(self, value):
        self._content = value
        self.checksum = hashlib.md5(self._content.encode('utf-8'))

这样,当您为.content恰好是一个属性)“设置值”时,您.checksum将成为该“设置器”功能的一部分。

这是 Python数据描述符协议的一部分。

于 2014-07-24T12:01:19.977 回答