我想在同一类的不同实例之间实现一些逻辑,但不知道如何正确地实现。审查和建议都是必需的
最好从一个例子开始。假设我有一个类foo
。这个类中有三个属性id
、group
和nitem
要实现的逻辑是,同一组下的foo
if的实例应该具有相同的项数(即nitem
)
有些人可能已经注意到我已经在实例之间实现了一个逻辑,它通过foo._id
计算实例的数量。但是你也可以很容易地理解这种方法是多么幼稚。如果创建三个foo
实例并删除中间的实例。最后一个实例仍将具有id=3
class foo(object):
_id = 0
def __init__(self, group, nitem):
foo._id += 1
self.id = foo._id
self.group = group
self.nitem = nitem
if __name__ == "__main__":
a = foo(1, 100)
b = foo(2, 10) #no error. Different groups can have different nitem.
c = foo(1, 10) # I want this to raise error.Same groups can't have different nitem.
重写
__new__
以在对象实例化时执行检查:https://docs.python.org/3/reference/datamodel.html#object.new
输出:
创建
c
时会出错由于使用特定的
nitem
编号定义的组的数量有限,因此您可以简单地使用字典,其中键是组名称,项是允许该组拥有的nitem
编号。然后在构造函数中,您可以简单地使用字典将默认值分配给组对应的nitem
例如:
相关问题 更多 >
编程相关推荐