如何限制对象创建

asb*_*asb 4 python python-2.7

考虑以下示例

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个键类对象.不应以任何方式更改循环.

Mar*_*ers 7

您可以通过为类提供__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.