[英]Conditional parameter without using if-else?
我有一個目前運行良好的程序。
from abc import ABC, abstractmethod
class User():
def __init__(self, transport_strategy):
self.transport_strategy = transport_strategy
def transport(self):
self.transport_strategy.transport()
class TransportStrategy():
@abstractmethod
def transport(self):
pass
class WalkStrategy(TransportStrategy):
def transport(self):
print("I walk")
class FlyStrategy(TransportStrategy):
def transport(self):
print("I fly")
if __name__ == "__main__":
u1 = User(FlyStrategy())
u1.transport()
u2 = User(WalkStrategy())
u2.transport()
現在我需要讓它在 cli 模式下接受參數。 例如python example.py --strategy=fly
我可以這樣編碼,但它違反了我一開始使用策略模式的目的。 我想盡可能減少不必要的if-else
。
if args.strategy == "fly":
strategy = FlyStrategy()
elif args.strategy == "walk":
strategy = WalkStrategy()
如果我理解這個問題,你可以使用字典
strategies = {
"fly": FlyStrategy
"walk": WalkStrategy
}
if args.strategy not in strategies:
raise ValueError(f'Unknown strategy: {args.strategy}')
strategy = strategies[args.strategy]()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.