在Python中强制选择的不变性

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

我希望能够声明特定的变量和不可变的对象。 (当可以更改应视为不可变的对象实例变量时,就会出现问题。)一种想法是使用命名元组。

from collections import namedtuple


C_tuple = namedtuple('C_tuple', 'a b c')
class C:

    def __init__(self, a, b, c):
        self.c_tuple = C_tuple(a=a, b=b, c=c)

    @property
    def a(self):
        return self.c_tuple.a

    @property
    def b(self):
        return self.c_tuple.b

    @property
    def c(self):
    return self.c_tuple.c

c = C(1, 2, 3)
print(c.a, c.b, c.c)   # ==> `1 2 3`

(我无法在C_tuple类中找到一种方法来声明C。即使使用from __future__ import annotations,我仍然会收到错误。]

有更好的方法吗?

谢谢。

python immutability namedtuple
1个回答
0
投票

[当您定义类时,我认为您是在定义引用自己的变量a,b,c。

def __init__(self, a, b, c):
    self.c_tuple = C_tuple(a='a', b='b', c='c')

而且,您在第20行中缺少缩进。

@property
def c(self):
    return self.c_tuple.c

请随意纠正我,因为namedtuple对我来说是一个全新的话题:)

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