我了解属性和类在Python中的工作方式,其中最清晰的示例是使用属性,我可以想到的是将温度设置为不使其低于绝对零值。我现在想知道,如果该方法实际上将要进行某种转换,则使用属性是个好主意。
抓取Wikipedia的以下属性示例:
23m
让我们说,颜色对于Pen类来说很重要,并且在那里有意义,但是实际的值设置器看起来更像这样:
<script>
function loadXMLDoc() {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
myFunction(this);
}
};
xmlhttp.open("GET", "HWR.xml", true);
xmlhttp.send();
}
function myFunction(xml) {
var i;
var xmlDoc = xml.responseXML;
var table="<tr><th>Artist</th><th>Title</th></tr>";
var x = xmlDoc.getElementsByTagName("my:myFields");
for (i = 0; i <x.length; i++) {
table += "<tr><td>" +
x[i].getElementsByTagName("my:EmpName")[0].childNodes[0].nodeValue +
"</td><td>" +
x[i].getElementsByTagName("my:EmpTitle")[0].childNodes[0].nodeValue +
"</td></tr>";
}
document.getElementById("demo").innerHTML = table;
}
</script>
我喜欢从对象的角度来看,您只是拥有颜色,但是除非有人深入研究,否则实现对于某人来说有点令人困惑。这是使用属性的好方法还是应该更像是这样:
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
更清楚地知道颜色的实际派生方式。
答案 0 :(得分:1)
整个想法恰恰相反:您不要使用类的用户知道如何实现颜色。这就是类和封装的全部要点。
用户只需进行分配
my_object.color = 'some_hex_value'
让我们的类来处理它。
属性的想法是,您应该将对象成员变量用作公共变量,然后仅在发生某些更改时才定义getter和setter。与例如。 Java,您可以定义在大多数情况下不执行任何操作的getter和setter,以防万一发生某些更改。
如果颜色对您的班级来说很重要,也许您应该创建一个Color
类,而Pen
类应该仅接受该实例。但是,除非您提供进一步的信息,否则就无法判断。