考虑以下示例
class Key:
def __init__(self, s):
self.s = s
d = {}
for x in range(1, 10000):
t = Key(x)
d[t] = x
Run Code Online (Sandbox Code Playgroud)
这将创建10000个键.是否可以控制类键的对象创建,例如我们不能创建超过5个键类对象.不应以任何方式更改循环.
您可以通过为类提供__new__方法来控制创建对象的方式或数量:
class Key(object):
_count = 0
def __new__(cls, s):
if cls._count == 5:
raise TypeError('Too many keys created')
cls._count += 1
return super(Key, cls).__new__(cls, s)
def __init__(self,s):
self.s = s
Run Code Online (Sandbox Code Playgroud)
Key.__new__()被调用来创建一个新实例; 在这里我会计算创建了多少,如果有太多,则会引发异常.您还可以在字典中保留实例池,或以其他方式控制新实例的创建.
请注意,这仅适用于继承自的新式类object.
| 归档时间: |
|
| 查看次数: |
768 次 |
| 最近记录: |