如何使用高度约束的实例在Python中创建类

Mar*_*rco 2 python math class

在Python中,有一些具有高度约束实例的内置类的示例.例如,"None"是其类的唯一实例,并且在bool类中只有两个对象,"True"和"False"(我希望到目前为止我或多或少都是正确的).

另一个很好的例子是整数:如果a和b是int类型的实例,那么a == b意味着a是b.

两个问题:

  1. 如何创建具有类似约束实例的类?例如,我们可以要求一个只有5个实例的类.或者可能存在无限多个实例,例如int类型,但这些实例不是任意的.

  2. 如果整数形成一个类,为什么int()给出0实例?将其与用户定义的类Cl进行比较,其中Cl()将给出类的实例,而不是特定的唯一实例,如0.不应该int()返回未指定的整数对象,即没有指定值的整数?

Sin*_*ion 5

您正在讨论提供类值语义,这通常通过以正常方式创建类实例来完成,但是记住每个实例,并且如果要创建匹配的实例,则改为给出已创建的实例.在python中,这可以通过重载类__new__ 方法来实现.

简单的例子,假设我们想使用整数对来表示坐标,并且具有正确的值语义.

class point(object):
    memo = {}
    def __new__(cls, x, y):
        if (x, y) in cls.memo:         # if it already exists, 
            return cls.memo[(x, y)]    # return the existing instance
        else:                          # otherwise, 
            newPoint = object.__new__(cls) # create it, 
            newPoint.x = x             # initialize it, as you would in __init__
            newPoint.y = y             
            cls.memo[(x, y)] = newPoint # memoize it, 
            return newPoint            # and return it!
Run Code Online (Sandbox Code Playgroud)