我正在尝试编写一个名为 Box 的课程。除了我开始创建一个新实例的那一刻,它完美地工作。我使用__iadd__
魔法函数为实例添加权重,因此此操作的结果是一个新实例,它继承了旧版本实例的某些特征,这就是重点。但是当我定义一个全新的对象(例如,一个新的框)时,它也会明确地继承旧对象的那些实例变量。我知道我应该编写一个重置方法但是可以在创建一个新实例时重置实例变量吗?或者我在做一些完全错误的事情需要采用不同的方法?
感谢您的帮助。
class Box(object):
masess = [] # Keeps track of masses
weight = 0 # The weight of box
over = 0 # represent the rest capacity of the box
full_boxes = 0 # Number of full boxes
def __init__(self, name, capacity):
self.name = name
self.capacity = capacity
def __iadd__(self, other):
Box.over = self.capacity - other # Determines the capacity of the box after some weights are added.
if Box.over >=0:
Box.masess.append(other)
Box.weight += other
if Box.weight == self.capacity:
Box.full_boxes += 1
return Box(self.name, self.capacity)
def __str__(self):
return '[%s:%s:C=%i:I=%i]' %(self.name, str(Box.masess), self.capacity,Box.weight)
@staticmethod
def get_aantal_volle_dozen():
return Box.full_boxes
A = Box('a', 20) #A new box
A +=5 # adding something to the box
A +=8
B = Box('b', 80)
print(B) # oooops!