具有多个值的属性设置器
发布于 2021-01-29 17:44:07
我有一个属性设置器,它通过获取两个字符串并对其进行哈希处理来生成唯一的ID:
@id.setter
def id(self,value1,value2):
self._id = sha512(value1+value2)
我有两个问题:
- 是否允许(考虑良好的python编码实践)以这种方式编码
- 如何将两个值传递给设置器?
关注者
0
被浏览
49
1 个回答
-
如何将两个值传递给设置器?
您可以将iterable(元组,列表)传递给setter,例如:
class A(object): def __init__(self, val): self.idx = val @property def idx(self): return self._idx @idx.setter def idx(self, val): try: value1, value2 = val except ValueError: raise ValueError("Pass an iterable with two items") else: """ This will run only if no exception was raised """ self._idx = sha512(value1+value2)
演示:
>>> a = A(['foo', 'bar']) #pass a list >>> b = A(('spam', 'eggs')) #pass a tuple >>> a.idx <sha512 HASH object @ 0xa57e688> >>> a.idx = ('python', 'org') #works >>> b.idx = ('python',) #fails Traceback (most recent call last): ... raise ValueError("Pass an iterable with two items") ValueError: Pass an iterable with two items