gpt4 book ai didi

python - 适当的类和属性结构

转载 作者:太空宇宙 更新时间:2023-11-04 04:37:49 26 4
gpt4 key购买 nike

我理解属性和类在 Python 中是如何工作的,我能想到的最清楚的使用属性的例子是设置温度以使其不低于绝对零值。我现在想知道如果方法实际上要进行某种转换,那么使用属性是个好主意。

从维基百科抓取这个属性示例:

class Pen(object):
def __init__(self):
self._color = 0 # "private" variable

@property
def color(self):
return self._color

@color.setter
def color(self, color):
self._color = color

假设颜色对于 Pen 的类很重要并且在那里是有意义的,但实际的值 setter 看起来更像这样:

@color.setter
def color(self, rgb_hex):
self._color = hex_handler.get_color(rgb_hex)

我喜欢从对象的角度来看,你只有颜色,但对某些人来说,实现有点模糊,除非他们深入研究它。那么这是使用属性的好方法还是应该更像:

def set_color_from_rgb_hex(self, rgb_hex):
self._color = hex_handler.get_color(rgb_hex)

颜色的实际来源更加清晰。

最佳答案

整个想法恰恰相反:您类的用户知道颜色是如何实现的。这就是类和封装的全部意义所在。

用户只是做了一个赋值

 my_object.color = 'some_hex_value'

让类来处理它。

属性的想法是你应该使用你的对象成员变量作为公共(public)变量,然后定义 getters 和 setters,只有当某些事情发生变化时。与例如对比。 java,您可以在其中定义在大多数情况下什么都不做的 getter 和 setter,只是为了在发生变化时被覆盖。

如果颜色对你的类很重要,也许你应该创建一个Color类,而Pen类应该只接受实例那个。但是,除非您提供更多信息,否则无法判断。

关于python - 适当的类和属性结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51285848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com