重构 python 设计模式

Refactor the python design patterns

我有一个名为 resources 的 class,我定义了一个名为 get_connect 的方法。我想将get_connectreturns的数据用到其他classes。我至少需要三个 classes 并且我使用 get_connect 的数据并且我必须解析该数据。为了实现这一点,我编写了下面的代码


class resources:
    @staticmethod
    def get_connect():       
        
        return 1 + 2


class Source1(resources):
    def __init__(self):
        self.response = resources.get_connect()

    def get__details1(self):
        print(self.response)

class Source2(resources):
    def __init__(self):
        self.response = resources.get_connect()
    def get_details2(self):
        print(self.response)

class Source3(resources):
    def __init__(self):
        self.response = resources.get_connect()
    def get__detail3(self):
        print(self.response)

source1 = Source1()
source2 = Source2()
source3 = Source3()
source1.get__details1()
source2.get_details2()
source3.get__detail3()

但是代码的问题是我正在调用 get_connect 方法的 init 方法中的每个 class。我不想重复代码。我需要帮助避免冗余,我在下面提出了要求

  1. 有什么方法可以在一个地方调用 get_connect 并将其用于其他 classes 可能是装饰器或其他什么?如果可以,我该怎么办?
  2. 在创建对象时我也在调用每个 class 并且每次都调用每个方法。有没有办法在这里使用任何设计模式?

如果有人帮助我了解这些 oops 概念,那将会很有用。

首先,您将 get_connect 方法用作静态方法有什么原因吗?

因为你在这里可以做的是在父级中声明它class:

class resources:

    def __init__(self):
        self.response = self.get_connect()

    def get_connect(self):
        return 1 + 2 

这样你就不需要在每个 class 上定义 __init__ 方法,因为它将自动从父级继承。

关于第二个问题,它确实取决于上下文,但您可以使用策略模式来检索您需要调用的 class。为此,将每个 classes 的获取详细信息的方法重命名为相同的方法,因为基本上它们用于相同的目的,但在 class 实现的上下文中发生了变化:

class Source1(resources):
    def get_details(self):
        print(self.response)

class Source2(resources):
    def get_details(self):
        print(self.response)

class Source3(resources):
    def get_details(self):
        print(self.response)

classes = {
    "source_1": Source1,
    "source_2": Source2,
    "source_3": Source3
}


source_class = classes["source_1"]
source = source_class()
source.get_details()

希望对您有所帮助!