具有多个值的属性设置器

发布于 2021-01-29 17:44:07

我有一个属性设置器,它通过获取两个字符串并对其进行哈希处理来生成唯一的ID:

@id.setter
def id(self,value1,value2):
    self._id = sha512(value1+value2)

我有两个问题:

  1. 是否允许(考虑良好的python编码实践)以这种方式编码
  2. 如何将两个值传递给设置器?
关注者
0
被浏览
49
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    如何将两个值传递给设置器?

    您可以将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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看