使用属性装饰器别名两个字典

问题描述 投票:0回答:1

我希望c成为a + b。

class A:
    def __init__(self, a, b):
        self.a = a
        self.b = b

    @property
    def c(self):
        return self.b + self.a
    @c.setter
    def c(self, value):
        self.b = value - self.a
        return self.b

这很好。

ex = A(1,2)
(ex.b, ex.c) # returns (2,3)
ex.c = 10
(ex.b, ex.c) # returns (9,10)

但是如果我想让b成为字典呢?

class A:
    def __init__(self, a, b):
        self.a = a
        self.b = b

    @property
    def c(self, key):
        return self.b[key] + self.a
    @c.setter
    def c(self, key, value):
        self.b[key] = value - self.a
        return self.b[key]

不喜欢这样。

ex = A(1,{'test' : 2})
(ex.b['test'],ex.c['test']) # TypeError: c() missing 1 required positional argument: 'key'

我想原因是ex.c在看到['test']部分之前就已经解析了。

如何避免这个问题?

python dictionary properties decorator getter-setter
1个回答
0
投票

尝试一下:

© www.soinside.com 2019 - 2024. All rights reserved.