我有两个不相互继承的类,但一个确实需要从另一个调用函数。我使用浴室类和淋浴类做了一个简化的例子。
第一个方法将函数作为一个 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.AddToItems
shower2 = 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 = None
class Shower3(BathroomItem):
def __init__(self):
self.AddToItems('Shower3')
class Sink(BathroomItem):
def __init__(self):
self.AddToItems('Sink')
bathroom3 = Bathroom3()
BathroomItem.AddToItems = bathroom3.AddToItems
shower3 = Shower3()
sink = Sink()
有推荐的方法吗?
SMILET
相关分类