我要以OOP方式重写我已经可以使用的Python代码,因为我想以模块化的方式实现它。我有一个使用多个参数获得的数据集。我想实现一个抽象工厂模式,并用它实例化包含不同参数的不同数据集的不同对象。最终目标是使用两个不同的数据集,我可以计算特定的内容,而且我不知道如何实现适用于两个具体对象的方法。
在我共享的图像中,既可以看到抽象工厂方法,又可以看到两个名为FompyDatasetHigh和FompyDatasetLow的具体数据集(我知道UML是不正确的,但仅用于显示结构)。然后,我想实现一种称为Dibl的方法,该方法将两个数据集都作为参数并返回计算。我理解的Abstract Factory方法的实现是在我迷路的方法中实现的。
那么您将如何编写一个将两个具体工厂对象作为参数的方法
我希望我所提供的信息足够多,我可以尝试提供其他信息。
答案 0 :(得分:1)
如果希望对象具有抽象类中的方法,则具体类需要继承抽象类
# Abstract Builder
class MonsterBuilder:
def __init__(self):
self.give_description()
self.give_equipment()
def give_description(self):
raise NotImplementedError
def give_equipment(self):
raise NotImplementedError
def __repr__(self):
return "{0.description} | Wielding: {0.equipment}".format(self)
# Concrete Builder
class Orc(MonsterBuilder):
descriptions = [" hungry", "n ugly", "n evil"]
def give_description(self):
description = random.choice(self.descriptions)
self.description = "A{} Orc".format(description)
def give_equipment(self):
self.equipment = "blunt sword"
其他选项可能依赖于将参数传递给类:
def create_orc(weapon):
class Orc(MonsterBuilder):
descriptions = [" hungry", "n ugly", "n evil"]
def give_description(self):
description = random.choice(self.descriptions)
self.description = "A{} Orc".format(description)
def give_equipment(self):
self.equipment = "blunt {}".format(weapon)
return Orc()
orc_1 = create_orc('knife')
print(orc_1)
# >>> A hungry Orc | Wielding: blunt knife
orc_2 = create_orc('hammer')
print(orc_1)
# >>> An ugly Orc | Wielding: blunt hammer
此仓库中有一些很棒的python OOP模式示例: https://github.com/faif/python-patterns
我还建议您在进入OOP之前先阅读他们的用例,如果使用不当,可能会使您的代码难以阅读。