将函数从一个类传递到另一个类中没有一个继承自另一个类时,是否有“最佳实践”?

我有两个不相互继承的类,但一个确实需要从另一个调用函数。我使用浴室类和淋浴类做了一个简化的例子。


第一个方法将函数作为一个 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()

有推荐的方法吗?


慕仙森
浏览 73回答 1
1回答

SMILET

如果这里的目标是向浴室添加物品,为什么不在创建新对象时传递浴室实例呢?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]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python