2017-12-26 12 views
0

数字の上に単位を印刷するデコレータを作成したいと思います。 『1ドル'10ドルでデコレータを作成してPythonで整数を印刷する

money = 1 
print(money) 

結果』

私はmoney.__str__()をラップする必要があることを得るが、私は一般的にそれを行う方法がわからないんだけどで

money = 10 
print(money) 

結果デコレータで。

私はここに正しいトラックですか?次は何とかデコレータになることができますか?

def str_cur(money): 
    if money == 1 or money == -1: 
     return f"{money} dollar" 
    else 
     return f"{money} dollars" 
+1

https://www.thecodeship.com/patterns/guide-to-python-function-decorators/ –

+1

@thefourtheye、面白いことに私はあなたのやり方を編集し、前後に行きました。私はあなたの編集が好きです。彼らはより明確です。 –

答えて

1

Pythonのデコレータは、変数ではなく関数(およびまれにクラス)に適用されます。だから私は彼らの構文を調べてもあなたを助けるつもりはないと思う。

あなたのお金のために整数を包むクラスを作成することで、あなたが望むことができるように聞こえるかもしれません。今

class Dollars(int): 
    def __str__(self): 
     if abs(self) == 1: 
      return f"{self} dollar" 
     else 
      return f"{self} dollars" 

は、あなたができる:あなたのクラスには、番号とともに、通貨の名前が含まれて__str__方法を持つことができます

​​

あなたが行うことができますので、私は上記に書いたDollarクラスは、intから継承それに対する通常の数値演算はすべて行われますが、Dollarインスタンスの代わりに通常のintオブジェクトが返されることがよくあります。ドルを取り戻すだけの場合は、数値メソッドの独自のバージョンを書く必要があります。ちょっと面倒です(おそらくintから継承を停止し、整数属性を持つことをお勧めします)。限られた数の数値オプション(お互いに金額を加算したり減算したり、整数で掛け算、除算するなど)をサポートする必要がある場合は、それほど悪くないかもしれません。

+0

ありがとう!基本的に、これは通常の方法でGOFデコレータパターンを実装しており、あなたはそれが正しい方法だと思います。 –

関連する問題