我有两个不相互继承的类,但一个确实需要从另一个调用函数。我使用浴室类和淋浴类做了一个简化的例子。第一个方法将函数作为一个 init 参数传入。第二个在第一个类创建后覆盖一个变量。方法一这似乎是执行此操作的正确方法,但是必须为每个Shower1实例传递函数可能很乏味。对于也需要该函数的每个其他类也必须这样做;比如Sink、Rug、Toliet等……如果需要将多个函数传递给每个函数,那就更加繁琐了。class Bathroom1: def __init__(self): self.items = [] def AddToItems(self, item): self.items.append(item) print('br1', str(self.items))class Shower1: def __init__(self, AddToItems): self.AddToItems = AddToItems self.AddToItems('Shower1')bathroom1 = Bathroom1()shower1= Shower1(bathroom1.AddToItems)方法二这得到与方法 1 相同的结果,我相信当需要传入多个类或多个方法时,这也不会那么乏味。不必为创建的每个新对象传递参数,而只需做一次。但我不确定这是否被认为是“正确的”,或者它是否会导致其他问题。class Bathroom2: def __init__(self): self.items = [] def AddToItems(self, item): self.items.append(item) print('br2', str(self.items))class Shower2: AddToItems = None def __init__(self): self.AddToItems('Shower2')bathroom2 = Bathroom2()Shower2.AddToItems = bathroom2.AddToItemsshower2 = Shower2()我可以使用继承来更轻松地添加其他类,如Sink、Rug等......继承示例:class Bathroom3: def __init__(self): self.items = [] def AddToItems(self, item): self.items.append(item) print('br3', str(self.items))class BathroomItem: AddToItems = Noneclass Shower3(BathroomItem): def __init__(self): self.AddToItems('Shower3')class Sink(BathroomItem): def __init__(self): self.AddToItems('Sink')bathroom3 = Bathroom3()BathroomItem.AddToItems = bathroom3.AddToItemsshower3 = Shower3()sink = Sink()有推荐的方法吗?
1 回答
SMILET
TA贡献1796条经验 获得超4个赞
如果这里的目标是向浴室添加物品,为什么不在创建新对象时传递浴室实例呢?
class Bathroom:
def __init__(self):
self.items = []
def AddToItems(self, item):
self.items.append(item)
print('br', str(self.items))
class BathroomItem:
def __init__(self, bathroom):
bathroom.AddToItems(self)
br = Bathroom() # bathroom.items == []
item1 = BathroomItem(br) # bathroom.items == [item1]
item2 = BathroomItem(br) # bathroom.items == [item1, item2]
添加回答
举报
0/150
提交
取消