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
),让它保存 r
、g
和 b
值,然后把它给 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
我不确定 luv
和 lab
是什么,但是如果它们依赖于给 rgb
的值,您可以使 rgb
成为 属性,并在有人尝试更改时设置它们 rgb
。
这也可以在没有 dataclass
es 的情况下通过像以前一样使用普通 类 来完成,但除非你真的需要控制,并且 真的 想要“私有”属性,一个简单的 dataclass
可能是更简洁的选择。
我有一个 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
),让它保存 r
、g
和 b
值,然后把它给 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
我不确定 luv
和 lab
是什么,但是如果它们依赖于给 rgb
的值,您可以使 rgb
成为 属性,并在有人尝试更改时设置它们 rgb
。
这也可以在没有 dataclass
es 的情况下通过像以前一样使用普通 类 来完成,但除非你真的需要控制,并且 真的 想要“私有”属性,一个简单的 dataclass
可能是更简洁的选择。