Python getter/setter 内部函数

Python getter/setter inner function

我有一个 class 颜色,它有一个方法 rgb,我想做的是添加三个内部函数 r、g 和 b,每个 return 我的 rgb 属性。我似乎无法从实例化对象访问这些内部函数。

__rgb 属性 是一个包含三个值的元组,我希望能够使用 Color.rgb.r、Color.rgb.g、Color.rgb.b

这是我的代码的简化版本

    @property
    def rgb(self):
        return self.__rgb

        def r(self):
            return self.__rgb[0]
        def g(self):
            return self.__rgb[1]
        def b(self):
            return self.__rgb[2]

    @rgb.setter
    def rgb(self, value):
        self.__rgb = value

        def r(self, value):
            self.__rgb[0] = value
        def g(self, value):
            self.__rgb[1] = value
        def b(self, value):
            self.__rgb[2] = value

Getter 和 setter 都抛出 AttributeError“'list' 对象没有属性 'r'”。

有什么方法可以在 Python 中做到这一点,或者在 functions/closures 中而不是 capable/used of/for 中?

您好, 帧数

我认为您应该改用自定义组合 类 而不是尝试嵌套方法。如果你想要不变性,有一个 dataclass (or NamedTuple),让它保存 rgb 值,然后把它给 Color:

from dataclasses import dataclass

@dataclass
class RGB:
    r: int
    g: int
    b: int

@dataclass
class Color:
    rgb: RGB
    # luv: ?
    # lab: ?

>>> c = Color(RGB(1, 2, 3))
>>> c.rgb.r
1

我不确定 luvlab 是什么,但是如果它们依赖于给 rgb 的值,您可以使 rgb 成为 属性,并在有人尝试更改时设置它们 rgb

这也可以在没有 dataclasses 的情况下通过像以前一样使用普通 类 来完成,但除非你真的需要控制,并且 真的 想要“私有”属性,一个简单的 dataclass 可能是更简洁的选择。