重构 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。我不想重复代码。我需要帮助避免冗余,我在下面提出了要求
- 有什么方法可以在一个地方调用 get_connect 并将其用于其他 classes 可能是装饰器或其他什么?如果可以,我该怎么办?
- 在创建对象时我也在调用每个 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()
希望对您有所帮助!
我有一个名为 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。我不想重复代码。我需要帮助避免冗余,我在下面提出了要求
- 有什么方法可以在一个地方调用 get_connect 并将其用于其他 classes 可能是装饰器或其他什么?如果可以,我该怎么办?
- 在创建对象时我也在调用每个 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()
希望对您有所帮助!