python 根据参数不同,调用不同的类和方法

python 根据参数不同,调用不同的类和方法

1. 使用字典映射类:

创建一个字典,其中键是参数值或参数值对应的字符串,值是对应的类。然后,你可以根据参数从字典中获取类,并创建实例或调用其方法。

class Class1:  
    def method(self):  
        print("Class1 method called")  

class Class2:  
    def method(self):  
        print("Class2 method called")  

# 创建类到字典的映射  
class_map = {  
    'class1': Class1,  
    'class2': Class2,  
}  

def call_class_method(class_key,method,value):  
    # 从字典中获取类  
    Class = class_map.get(class_key)  
    if Class is not None:  
        # 创建实例并调用方法  
        instance = Class()  
        #instance.method()  
        getattr(instance,method)(value)
    else:  
        print("Invalid class key")  

# 使用函数根据参数调用不同的类方法  
call_class_method('class1',"method","123")  # 输出: Class1 method called  
call_class_method('class2',"method","456")  # 输出: Class2 method called

2. 使用工厂函数或方法:

工厂函数或方法可以根据传入的参数返回不同的类实例。这种方法更灵活,允许你在返回实例之前进行额外的逻辑处理。

def create_instance(class_key, *args, **kwargs):  
    if class_key == 'class1':  
        return Class1(*args, **kwargs)  
    elif class_key == 'class2':  
        return Class2(*args, **kwargs)  
    else:  
        raise ValueError("Invalid class key")  

# 使用工厂函数创建实例并调用方法  
instance = create_instance('class1')  
instance.method()  # 输出: Class1 method called

3. 使用策略模式:

如果你的类实现了相同的接口(即它们都有相同的方法),你可以使用策略模式。策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式使得算法可以独立于使用它的客户端变化。

from abc import ABC, abstractmethod  

class Strategy(ABC):  
    @abstractmethod  
    def execute(self):  
        pass  

class ConcreteStrategyA(Strategy):  
    def execute(self):  
        return "Strategy A"  

class ConcreteStrategyB(Strategy):  
    def execute(self):  
        return "Strategy B"  

class Context:  
    def __init__(self, strategy):  
        self.strategy = strategy  

    def set_strategy(self, strategy):  
        self.strategy = strategy  

    def execute_strategy(self):  
        return self.strategy.execute()  

# 使用策略模式  
context = Context(ConcreteStrategyA())  
print(context.execute_strategy())  # 输出: Strategy A  
context.set_strategy(ConcreteStrategyB())  
print(context.execute_strategy())  # 输出: Strategy B
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

车载testing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值