假设我有“ Pizza”类:
选项1:
class Pizza:
def __init__(self, tools):
self.tools = tools
self.slices = []
def cut(self, slices: int):
self.slices = self.tools.pizza_cutter(slices=slices)
def eat(self, slices: int):
if len(self.slices) => slices:
diff = len(self.slices) - slices
self.slices[:diff]
else:
print('Not enough slices to eat!')
选项2:
class Pizza:
def __init__(self):
self.slices = []
def cut(self, slices: int, tools):
self.slices = tools.pizza_cutter(slices=slices)
def eat(self, slices: int):
if len(self.slices) => slices:
diff = len(self.slices) - slices
self.slices[:diff]
else:
print('Not enough slices to eat!')
如您所见,它要么加载tools
到中__init__
,要么只是tools
在实际使用它的方法中接收该实例。
我想知道,最好的方法是什么?考虑到有多个实例Pizza
创建的每个循环并且在这个循环结束时,我cut()
所有的Pizza
小号
通常,我将通过描述方式来确定是否在类中包含某些内容。
当“和”这个词开始起作用时,我知道我已经在一个班级投入过多,需要将其分开。在这种情况下,工具不是比萨饼的固有部分。您可以不用任何工具即可切比萨饼。如果没有工具,比萨饼可能很难切开,但这并没有比萨饼那么少。
考虑到这一点,我建议您不要将工具放在比萨中
到那时,虽然我可能会改变班级的结构,以包括是否切过披萨,但是如果有人在不切披萨的情况下尝试食用披萨,则会适当地通知他们