簡體   English   中英

不使用if-else的條件參數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM