擅长:python、mysql、java
<p>重写<code>__new__</code>以在对象实例化时执行检查:</p>
<p><a href="https://docs.python.org/3/reference/datamodel.html#object.__new__" rel="nofollow noreferrer">https://docs.python.org/3/reference/datamodel.html#object.<strong>new</strong></a></p>
<pre class="lang-py prettyprint-override"><code>from typing import Any
class foo(object):
_groups = {}
def __new__(cls, group, nitem) -> Any:
if group not in cls._groups:
cls._groups[group] = nitem
if cls._groups[group] == nitem:
return super().__new__(cls)
raise ValueError('mismatched group and nitems')
def __init__(self, group, nitem):
self.group = group
self.nitem = nitem
if __name__ == "__main__":
a = foo(1, 100)
b = foo(2, 10)
c = foo(2, 100)
</code></pre>
<p>输出:</p>
<pre><code>Traceback (most recent call last):
File "app.py", line 23, in <module>
c = foo(2, 100)
File "app.py", line 12, in __new__
raise ValueError('mismatched group and nitems')
ValueError: mismatched group and nitems
</code></pre>
<p>创建<code>c</code>时会出错</p>