From 8a06af1fa84379ff4b8c7cadcf1431744b010d21 Mon Sep 17 00:00:00 2001 From: Gangmin-Kim <42054789+Gangsss@users.noreply.github.com> Date: Sun, 31 Jul 2022 21:16:33 +0900 Subject: [PATCH 1/9] featue/define beverage class --- src/cafeordersimulator/beverage.py | 136 +++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 src/cafeordersimulator/beverage.py diff --git a/src/cafeordersimulator/beverage.py b/src/cafeordersimulator/beverage.py new file mode 100644 index 0000000..e4a0af9 --- /dev/null +++ b/src/cafeordersimulator/beverage.py @@ -0,0 +1,136 @@ +""" +각종 음료 관련 코드 + +Description: + 추상클래스 Beverage를 상속받아, Espresso, HouseBlend 구현 + +Author: + Name: Gangmin Kim + Email: rlarkdals7@gmail.com +""" +from abc import abstractmethod +from typing import Any + + +class Beverage: + """summary + Description: + 다양한 Beverage들을 구현하기 위한 Abstractive class + """ + + @abstractmethod + def __init__(self) -> None: + """상속받는 클래스에 따라 Description 구현 + + Args: + None + + Returns: + None + """ + self.description = "제목 없음" + + @abstractmethod + def getdescription(self) -> str: + """상속받는 클래스에 따라 Beverage의 이름 출력 구현 + + Args: + None + + Returns: + None + """ + return self.description + + @abstractmethod + def cost(self) -> Any: + """상속받는 클래스에 따라 Beverage의 가격 출력 구현 + + Args: + None + + Returns: + None + """ + + +class Espresso(Beverage): + """summary + Description: + Beverage 중 Espresso 클래스 + """ + + def __init__(self) -> None: + """상속받는 클래스에 따라 Description 구현 + + Args: + None + + Returns: + None + """ + super().__init__() + self.description = "Espresso" + + def getdescription(self) -> str: + """Espresso 이름 출력 구현 + + Args: + None + + Returns: + None + """ + return self.description + + def cost(self) -> float: + """Espresso 가격 출력 구현 + + Args: + None + + Returns: + None + """ + return 1.99 + + +class HouseBlend(Beverage): + """summary + Description: + Beverage 중 Espresso 클래스 + """ + + def __init__(self) -> None: + """상속받는 클래스에 따라 Description 구현 + + Args: + None + + Returns: + None + """ + super().__init__() + self.description = "HouseBlend" + + def getdescription(self) -> str: + """Espresso 이름 출력 구현 + + Args: + None + + Returns: + description + """ + return self.description + + def cost(self) -> float: + """Espresso 가격 출력 구현 + + Args: + None + + Returns: + cost + """ + return 0.89 From faf3d9b7feab90ba0b18c08111131a0069d3184d Mon Sep 17 00:00:00 2001 From: Gangsss Date: Mon, 29 Aug 2022 18:00:15 +0900 Subject: [PATCH 2/9] =?UTF-8?q?=E2=9C=A8=20add=20condiment=20python=20scri?= =?UTF-8?q?pt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cafeordersimulator/beverage.py | 49 ++------------- src/cafeordersimulator/condiment.py | 93 +++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 44 deletions(-) create mode 100644 src/cafeordersimulator/condiment.py diff --git a/src/cafeordersimulator/beverage.py b/src/cafeordersimulator/beverage.py index e4a0af9..f283220 100644 --- a/src/cafeordersimulator/beverage.py +++ b/src/cafeordersimulator/beverage.py @@ -8,29 +8,15 @@ Name: Gangmin Kim Email: rlarkdals7@gmail.com """ -from abc import abstractmethod -from typing import Any +from abc import ABCMeta, abstractmethod -class Beverage: +class Beverage(metaclass=ABCMeta): """summary Description: 다양한 Beverage들을 구현하기 위한 Abstractive class """ - @abstractmethod - def __init__(self) -> None: - """상속받는 클래스에 따라 Description 구현 - - Args: - None - - Returns: - None - """ - self.description = "제목 없음" - - @abstractmethod def getdescription(self) -> str: """상속받는 클래스에 따라 Beverage의 이름 출력 구현 @@ -40,10 +26,9 @@ def getdescription(self) -> str: Returns: None """ - return self.description @abstractmethod - def cost(self) -> Any: + def cost(self) -> float: """상속받는 클래스에 따라 Beverage의 가격 출력 구현 Args: @@ -60,18 +45,6 @@ class Espresso(Beverage): Beverage 중 Espresso 클래스 """ - def __init__(self) -> None: - """상속받는 클래스에 따라 Description 구현 - - Args: - None - - Returns: - None - """ - super().__init__() - self.description = "Espresso" - def getdescription(self) -> str: """Espresso 이름 출력 구현 @@ -81,7 +54,7 @@ def getdescription(self) -> str: Returns: None """ - return self.description + return "Espresso" def cost(self) -> float: """Espresso 가격 출력 구현 @@ -101,18 +74,6 @@ class HouseBlend(Beverage): Beverage 중 Espresso 클래스 """ - def __init__(self) -> None: - """상속받는 클래스에 따라 Description 구현 - - Args: - None - - Returns: - None - """ - super().__init__() - self.description = "HouseBlend" - def getdescription(self) -> str: """Espresso 이름 출력 구현 @@ -122,7 +83,7 @@ def getdescription(self) -> str: Returns: description """ - return self.description + return "HouseBlend" def cost(self) -> float: """Espresso 가격 출력 구현 diff --git a/src/cafeordersimulator/condiment.py b/src/cafeordersimulator/condiment.py new file mode 100644 index 0000000..0d0afd8 --- /dev/null +++ b/src/cafeordersimulator/condiment.py @@ -0,0 +1,93 @@ +""" +각종 음료 관련 코드 + +Description: + 추상클래스 Beverage를 상속받아, Espresso, HouseBlend 구현 + +Author: + Name: Gangmin Kim + Email: rlarkdals7@gmail.com +""" +from typing import Any + +from beverage import Beverage + + +class CondimentDecorator(Beverage): + """summary + Description: + 첨가물을 나타내는 추상클래스 + """ + + def __init__(self, bevarage: Beverage) -> None: + """상속받는 클래스에 따라 구현 + + Args: + None + + Returns: + None + """ + super().__init__() + self._beverage = bevarage + + @property + def beverage(self) -> Beverage: + """summary + Description: + 상속받는 클래스에 따라 구현 + + Args: + None + + Returns: + None + """ + return self._beverage + + def getdescription(self) -> Any: + """summary + Description: + 상속받는 클래스에 따라 Beverage의 이름 출력 구현 + + Args: + None + + Returns: + None + """ + return self._beverage.getdescription() + + def cost(self) -> Any: + """summary + Description: + 상속받는 클래스에 따라 Beverage의 가격 출력 구현 + + Args: + None + + Returns: + None + """ + return self._beverage.cost() + + +class Mocha(CondimentDecorator): + """summary + Description: + Mocha를 나타내는 클래스 + """ + + def getdescription(self) -> Any: + """summary + Description: + 설명을 덧붙이는 함수 + """ + return self.beverage.getdescription() + ", 모카" + + def cost(self) -> Any: + """summary + Description: + cost 계산시 0.2를 더해준다. + """ + return self.beverage.cost() + 0.20 From 91004ff066d65536713e1f3d179761b91c371530 Mon Sep 17 00:00:00 2001 From: Gangsss Date: Mon, 19 Sep 2022 22:07:29 +0900 Subject: [PATCH 3/9] =?UTF-8?q?=E2=9C=A8=20fix=20test=20script?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cafeordersimulator/test.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/cafeordersimulator/test.py diff --git a/src/cafeordersimulator/test.py b/src/cafeordersimulator/test.py new file mode 100644 index 0000000..b0fa89b --- /dev/null +++ b/src/cafeordersimulator/test.py @@ -0,0 +1,34 @@ +""" +cafe order test 코드 + +Description: + cafe order 테스트를 위한 코드 + +Author: + Name: Gangmin Kim + Email: rlarkdals7@gmail.com +""" + +from beverage import Espresso, HouseBlend +from condiment import Mocha + + +def main() -> None: + """summary + Description: + Test 진행함수 + Args : + None + Returns : + None + """ + bevarage = Espresso() + print(bevarage.getdescription() + " $" + str(bevarage.cost())) + + beverage2 = HouseBlend() + beverage2 = Mocha(beverage2) + print(beverage2.getdescription() + " $" + str(beverage2.cost())) + + +if __name__ == "__main__": + main() From 458949d21b7c2c74818c13f3da4ea5e721a6d98e Mon Sep 17 00:00:00 2001 From: Kim Kang Min <42054789+Gangsss@users.noreply.github.com> Date: Mon, 26 Sep 2022 14:16:32 +0900 Subject: [PATCH 4/9] update function name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Kim dong hyun, 김동현 --- src/cafeordersimulator/beverage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cafeordersimulator/beverage.py b/src/cafeordersimulator/beverage.py index f283220..db4c03a 100644 --- a/src/cafeordersimulator/beverage.py +++ b/src/cafeordersimulator/beverage.py @@ -17,7 +17,7 @@ class Beverage(metaclass=ABCMeta): 다양한 Beverage들을 구현하기 위한 Abstractive class """ - def getdescription(self) -> str: + def get_description(self) -> str: """상속받는 클래스에 따라 Beverage의 이름 출력 구현 Args: From a962395678900dbb7b3a914de587221b3539727d Mon Sep 17 00:00:00 2001 From: Gangsss Date: Mon, 26 Sep 2022 14:18:54 +0900 Subject: [PATCH 5/9] =?UTF-8?q?=E2=9C=A8=20fix=20function=20name?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cafeordersimulator/beverage.py | 4 ++-- src/cafeordersimulator/condiment.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cafeordersimulator/beverage.py b/src/cafeordersimulator/beverage.py index db4c03a..af663e7 100644 --- a/src/cafeordersimulator/beverage.py +++ b/src/cafeordersimulator/beverage.py @@ -45,7 +45,7 @@ class Espresso(Beverage): Beverage 중 Espresso 클래스 """ - def getdescription(self) -> str: + def get_description(self) -> str: """Espresso 이름 출력 구현 Args: @@ -74,7 +74,7 @@ class HouseBlend(Beverage): Beverage 중 Espresso 클래스 """ - def getdescription(self) -> str: + def get_description(self) -> str: """Espresso 이름 출력 구현 Args: diff --git a/src/cafeordersimulator/condiment.py b/src/cafeordersimulator/condiment.py index 0d0afd8..051622f 100644 --- a/src/cafeordersimulator/condiment.py +++ b/src/cafeordersimulator/condiment.py @@ -45,7 +45,7 @@ def beverage(self) -> Beverage: """ return self._beverage - def getdescription(self) -> Any: + def get_description(self) -> Any: """summary Description: 상속받는 클래스에 따라 Beverage의 이름 출력 구현 @@ -78,7 +78,7 @@ class Mocha(CondimentDecorator): Mocha를 나타내는 클래스 """ - def getdescription(self) -> Any: + def get_description(self) -> Any: """summary Description: 설명을 덧붙이는 함수 From 22a02cb63a88ca316d54aefb4f426e96dc24cf7c Mon Sep 17 00:00:00 2001 From: Gangsss Date: Mon, 26 Sep 2022 14:33:09 +0900 Subject: [PATCH 6/9] =?UTF-8?q?=E2=9C=A8=20fix=20function=20name=20and=20d?= =?UTF-8?q?escription?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cafeordersimulator/beverage.py | 54 +++++++---------------------- src/cafeordersimulator/condiment.py | 47 ++++++++++--------------- 2 files changed, 32 insertions(+), 69 deletions(-) diff --git a/src/cafeordersimulator/beverage.py b/src/cafeordersimulator/beverage.py index af663e7..c92a00e 100644 --- a/src/cafeordersimulator/beverage.py +++ b/src/cafeordersimulator/beverage.py @@ -12,86 +12,58 @@ class Beverage(metaclass=ABCMeta): - """summary + """ Description: 다양한 Beverage들을 구현하기 위한 Abstractive class """ def get_description(self) -> str: - """상속받는 클래스에 따라 Beverage의 이름 출력 구현 - - Args: - None - - Returns: - None + """ + Description: + 상속받는 클래스에 따라 Beverage의 이름 출력 구현 """ @abstractmethod def cost(self) -> float: - """상속받는 클래스에 따라 Beverage의 가격 출력 구현 - - Args: - None - - Returns: - None + """ + Description: + 상속받는 클래스에 따라 Beverage의 가격 출력 구현 """ class Espresso(Beverage): - """summary + """ Description: Beverage 중 Espresso 클래스 """ def get_description(self) -> str: """Espresso 이름 출력 구현 - - Args: - None - - Returns: - None + Returns: name of beverage """ return "Espresso" def cost(self) -> float: """Espresso 가격 출력 구현 - - Args: - None - - Returns: - None + Returns: cost of beverage """ return 1.99 class HouseBlend(Beverage): - """summary + """ Description: Beverage 중 Espresso 클래스 """ def get_description(self) -> str: """Espresso 이름 출력 구현 - - Args: - None - - Returns: - description + Returns: name of beverage """ return "HouseBlend" def cost(self) -> float: """Espresso 가격 출력 구현 - - Args: - None - - Returns: - cost + Returns: cost of beverage """ return 0.89 diff --git a/src/cafeordersimulator/condiment.py b/src/cafeordersimulator/condiment.py index 051622f..6539ff0 100644 --- a/src/cafeordersimulator/condiment.py +++ b/src/cafeordersimulator/condiment.py @@ -14,52 +14,38 @@ class CondimentDecorator(Beverage): - """summary + """ Description: 첨가물을 나타내는 추상클래스 """ def __init__(self, bevarage: Beverage) -> None: - """상속받는 클래스에 따라 구현 - - Args: - None - - Returns: - None - """ super().__init__() self._beverage = bevarage @property def beverage(self) -> Beverage: - """summary + """ Description: 상속받는 클래스에 따라 구현 - Args: - None - - Returns: - None + Returns: + beverage """ return self._beverage def get_description(self) -> Any: - """summary + """ Description: 상속받는 클래스에 따라 Beverage의 이름 출력 구현 - Args: - None - - Returns: - None + Returns: + beverage.get_description """ - return self._beverage.getdescription() + return self._beverage.get_description() def cost(self) -> Any: - """summary + """ Description: 상속받는 클래스에 따라 Beverage의 가격 출력 구현 @@ -67,27 +53,32 @@ def cost(self) -> Any: None Returns: - None + beverage.cost """ return self._beverage.cost() class Mocha(CondimentDecorator): - """summary + """ Description: Mocha를 나타내는 클래스 """ def get_description(self) -> Any: - """summary + """ Description: 설명을 덧붙이는 함수 + + Returns: + beverage의 이름 + ", 모카" """ - return self.beverage.getdescription() + ", 모카" + return self.beverage.get_description() + ", 모카" def cost(self) -> Any: - """summary + """ Description: cost 계산시 0.2를 더해준다. + Returns: + beverage cost + 0.2 """ return self.beverage.cost() + 0.20 From 1a2eaddb20f06d2a30424628cc1d86d61d9cc727 Mon Sep 17 00:00:00 2001 From: Gangsss Date: Mon, 26 Sep 2022 20:42:24 +0900 Subject: [PATCH 7/9] =?UTF-8?q?=E2=9C=A8=20add=20size=20function?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cafeordersimulator/beverage.py | 19 ++++++++++++++++++ src/cafeordersimulator/condiment.py | 30 +++++++++++++++++++++++++---- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/src/cafeordersimulator/beverage.py b/src/cafeordersimulator/beverage.py index c92a00e..58fac27 100644 --- a/src/cafeordersimulator/beverage.py +++ b/src/cafeordersimulator/beverage.py @@ -17,12 +17,31 @@ class Beverage(metaclass=ABCMeta): 다양한 Beverage들을 구현하기 위한 Abstractive class """ + def __init__(self): + self.size = "tall" + def get_description(self) -> str: """ Description: 상속받는 클래스에 따라 Beverage의 이름 출력 구현 """ + def set_size(self, size) -> str: + """ + Description: + Beverage의 사이즈 지정 + args : + size : Beverage의 사이즈 + """ + self.size = size + + def get_size(self) -> str: + """ + Description: + Beverage의 사이즈 출력 구현 + """ + return self.size + @abstractmethod def cost(self) -> float: """ diff --git a/src/cafeordersimulator/condiment.py b/src/cafeordersimulator/condiment.py index 6539ff0..6a383af 100644 --- a/src/cafeordersimulator/condiment.py +++ b/src/cafeordersimulator/condiment.py @@ -44,6 +44,16 @@ def get_description(self) -> Any: """ return self._beverage.get_description() + def get_size(self) -> Any: + """ + Description: + 상속받는 클래스에 따라 Beverage의 사이즈 출력 구현 + + Returns: + beverage.get_size + """ + return self._beverage.get_size() + def cost(self) -> Any: """ Description: @@ -64,6 +74,10 @@ class Mocha(CondimentDecorator): Mocha를 나타내는 클래스 """ + # def __init__(self, bevarage: Beverage) -> None: + # super().__init__() + # self._beverage = bevarage + def get_description(self) -> Any: """ Description: @@ -72,13 +86,21 @@ def get_description(self) -> Any: Returns: beverage의 이름 + ", 모카" """ - return self.beverage.get_description() + ", 모카" + return self._beverage.get_description() + ", 모카" def cost(self) -> Any: """ Description: - cost 계산시 0.2를 더해준다. + cost 계산시 size에 따라서 cost를 계산해준다. Returns: - beverage cost + 0.2 + beverage cost + size depends cost """ - return self.beverage.cost() + 0.20 + beverage_cost = self._beverage.cost() + + if self._beverage.get_size() == "tall": + beverage_cost += 0.10 + elif self._beverage.get_size() == "grande": + beverage_cost += 0.15 + elif self._beverage.get_size() == "venti": + beverage_cost += 0.20 + return beverage_cost From df79f7c6104bfdf344bfaf2313918808f1137947 Mon Sep 17 00:00:00 2001 From: Gangsss Date: Mon, 26 Sep 2022 20:56:37 +0900 Subject: [PATCH 8/9] =?UTF-8?q?=E2=9C=A8=20fix=20description?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cafeordersimulator/beverage.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/cafeordersimulator/beverage.py b/src/cafeordersimulator/beverage.py index 58fac27..08f1592 100644 --- a/src/cafeordersimulator/beverage.py +++ b/src/cafeordersimulator/beverage.py @@ -30,6 +30,7 @@ def set_size(self, size) -> str: """ Description: Beverage의 사이즈 지정 + args : size : Beverage의 사이즈 """ @@ -58,12 +59,14 @@ class Espresso(Beverage): def get_description(self) -> str: """Espresso 이름 출력 구현 + Returns: name of beverage """ return "Espresso" def cost(self) -> float: """Espresso 가격 출력 구현 + Returns: cost of beverage """ return 1.99 @@ -77,12 +80,14 @@ class HouseBlend(Beverage): def get_description(self) -> str: """Espresso 이름 출력 구현 + Returns: name of beverage """ return "HouseBlend" def cost(self) -> float: """Espresso 가격 출력 구현 + Returns: cost of beverage """ return 0.89 From c3006adc042a5c8e2320e938e30cc1ac20e44675 Mon Sep 17 00:00:00 2001 From: Gangsss Date: Mon, 26 Sep 2022 20:58:05 +0900 Subject: [PATCH 9/9] =?UTF-8?q?=E2=9C=A8=20add=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cafeordersimulator/test.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/cafeordersimulator/test.py b/src/cafeordersimulator/test.py index b0fa89b..a2cc413 100644 --- a/src/cafeordersimulator/test.py +++ b/src/cafeordersimulator/test.py @@ -17,17 +17,21 @@ def main() -> None: """summary Description: Test 진행함수 - Args : - None - Returns : - None """ bevarage = Espresso() - print(bevarage.getdescription() + " $" + str(bevarage.cost())) + print(bevarage.get_description() + " $" + str(bevarage.cost())) + assert bevarage.get_description() == "Espresso" beverage2 = HouseBlend() beverage2 = Mocha(beverage2) - print(beverage2.getdescription() + " $" + str(beverage2.cost())) + print(beverage2.get_description() + " $" + str(beverage2.cost())) + assert beverage2.get_description() == "HouseBlend, 모카" + + beverage3 = HouseBlend() + beverage3.set_size("venti") + beverage3 = Mocha(beverage3) + print(beverage3.cost()) + assert beverage3.cost() == 1.09 if __name__ == "__main__":