擅长:python、mysql、java
<p>实际上,您并不是在“绕过setter”——当您试图设置<code>t.points</code>(即:<code>t.points = []</code>)时,setter被调用,而不是当您对setter返回的列表进行变异时</p>
<p>如果您不想让客户机代码改变列表,可以返回一些不可变的结构(这将表明它不应该被更改),或者至少返回一个列表的副本(该副本仍然是可变的,但是修改不会影响原始列表-请注意,这可能会让您的代码用户大吃一惊)</p>
<p>注意:在您的代码片段中有以下注释:</p>
<blockquote>
<p>which will return the list by reference</p>
</blockquote>
<p>如果您希望用Python完成任何事情,请不要用其他语言来思考,而是理解Python是如何工作的。Python中没有“按引用”或“按值”,只有名称和对象。getter不会“通过引用返回列表”,而是返回列表,句点。我强烈建议您<a href="https://nedbatchelder.com/text/names.html" rel="nofollow noreferrer">read this reference article</a>(是的,蹩脚的双关语,抱歉)了解更多关于Python的名称和对象的概念</p>