2017-12-26 5 views
0

숫자에 단위를 인쇄하는 데코레이터를 만들고 싶습니다. 1 달러 'Decorator 만들기 Python에서 정수 인쇄

'10 달러'에

money = 1 
print(money) 

결과 '에

money = 10 
print(money) 

결과는 내가 money.__str__()을 포장해야한다는 것을 얻을 수 있지만 일반적으로 그렇게하는 방법을 잘 모르겠어요 장식 자와.

여기 올바른 길에 있습니까? 다음과 같은 방법으로 장식자가 될 수 있습니까?

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__ 방법을 가질 수

money = Dollars(10) 
print(money) # prints "10 dollars" 

당신이 할 수 있도록 제가 위에서 쓴 Dollar 클래스는, int에서 상속 그것에 대한 모든 일반적인 수치 연산이 있지만, Dollar 인스턴스 대신에 보통 int 객체를 반환하게됩니다. 달러 만 돌려 받고 싶다면 자신 만의 숫자 메소드를 작성해야합니다. 이는 지루한 일입니다. (아마도 int에서 상속을 중지하고 정수 속성 만 갖고 싶을 것입니다.) 제한된 수의 숫자 옵션 (서로 달러화를 더하고 빼기, 정수로 곱셈, 나눗셈하기 등)을 지원하기 만하면된다면 그리 나쁘지 않을 것입니다.

+0

고마워! 본질적으로 이는 정상적인 방식으로 GOF 데코레이터 패턴을 구현합니다. 그리고 저는 이것이 당신이가는 길이라고 생각합니다. –