擅长:python、mysql、java
<pre><code>class Foo():
_names = set()
@property
def name(self):
return self._name
def __init__(self, name):
if name in Foo._names:
raise NameError("Already used name '%s'." % name)
self._name = name
Foo._names.add(name)
</code></pre>
<p>对我来说,这比搞乱元类等要简单得多。如果你需要对几个类这样做,元类更有意义。在</p>
<p>使name成为不带write方法的属性会导致赋值失败,从而有效地使<code>name</code>为常量。在</p>
<p>如果子类<code>Foo</code>,则它在所有子类中保持相同的名称集,这可能是也可能不是您想要的。在</p>