python getattr实现工厂模式
时间: 2023-05-04 12:04:00 浏览: 116
Python中的getattr函数可以用于实现工厂模式,实现方式如下:
1. 定义一个工厂类,该类包含一个静态方法create_instance,用于创建实例。
2. 在该类中定义多个类方法,用于创建不同种类的实例。每个方法都返回一个具体的实例。
3. 在create_instance方法中,根据传入的参数(例如类型)动态调用相应的类方法,返回指定类型的实例。
4. 如果传入的类型不在支持的列表中,可以抛出一个异常或者返回一个默认实例。
示例代码如下:
```
class CarFactory:
@staticmethod
def create_instance(car_type):
if car_type == 'budget':
return CarFactory.create_budget_car()
elif car_type == 'luxury':
return CarFactory.create_luxury_car()
elif car_type == 'sports':
return CarFactory.create_sports_car()
else:
raise ValueError('Unsupported car type')
@staticmethod
def create_budget_car():
return BudgetCar()
@staticmethod
def create_luxury_car():
return LuxuryCar()
@staticmethod
def create_sports_car():
return SportsCar()
```
在这个例子中,CarFactory类有一个静态方法create_instance,接受一个字符串参数car_type,根据这个参数返回相应的实例。
通过定义多个类方法create_budget_car、create_luxury_car和create_sports_car,可以轻松地创建不同种类的汽车实例。
例如,如果我们要创建一个豪华轿车,可以调用CarFactory.create_instance('luxury'),这将返回一个LuxuryCar实例。
使用getattr函数实现工厂模式的过程大体上与上述过程相同,只是可以通过字符串动态调用相应的类方法。例如:
```
def create_car(car_type):
car_factory = CarFactory()
method_name = 'create_{}_car'.format(car_type)
return getattr(car_factory, method_name)()
create_car('budget')
create_car('luxury')
create_car('sports')
```
这里我们定义了一个create_car函数,接受一个字符串参数car_type,根据这个参数动态调用CarFactory类的对应方法,返回相应的实例。在这个过程中,getattr函数被用来通过字符串方法名动态调用对应的函数。
阅读全文