擅长:python、mysql、java
<p>你这样描述是绝对不可能的。对名称的赋值是Python的一个基本特性,并且没有提供任何钩子来更改其行为。</p>
<p>但是,通过重写<code>.__setattr__()</code>,可以根据需要控制类实例<em>中成员的赋值。</p>
<pre><code>class MyClass(object):
def __init__(self, x):
self.x = x
self._locked = True
def __setattr__(self, name, value):
if self.__dict__.get("_locked", False) and name == "x":
raise AttributeError("MyClass does not allow assignment to .x member")
self.__dict__[name] = value
>>> m = MyClass(3)
>>> m.x
3
>>> m.x = 4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 7, in __setattr__
AttributeError: MyClass does not allow assignment to .x member
</code></pre>
<p>注意,有一个成员变量<code>_locked</code>,它控制是否允许赋值。您可以解锁它以更新值。</p>