강의/python3

[python3] 10강. class 활용 예제

jinkwon.kim 2022. 5. 7. 01:19
728x90
반응형

목표 

class를 사용하여 TV를 만들어 보겠습니다. 

강의

https://youtu.be/noQAzNMrEko

TV구조 

1. 전원 버튼 

3. 볼륨 버튼

4. 채널 버튼

5. 화면

6. 통신사

7. 리모콘

필요 사전 지식 

1. thread

    - program 내부에서 기본 program 로직과 별도로 수행되는 function을 실행 시킬 때 사용하는 기술 입니다.

2. enum 

    - 상수 값을보기 인지 하기 편하게 만들기 위해서 사용하는 기술 입니다. 
    - https://docs.python.org/ko/3/library/enum.html

도식

 

결과물

전체 코드

import enum
import time
import os
import threading as th


"""
    통신사
"""


class LGUPlus:
    chanel_info = (
        '안녕하세요 수푸자 여려분 반갑습니다.',
        '오늘의 날씨는 맑을 예정입니다.',
        '내일의 날씨는 비가올 예정입니다.',
        '없는 채널 입니다.'
    )

    def get_chanel_content(self, number):
        if (self.chanel_info.__len__() <= number):
            return self.chanel_info[self.chanel_info.__len__() - 1]
        return self.chanel_info[number]


"""
    TV 부품들 정의
"""


class button_status(enum.IntEnum):
    OFF = 0
    ON = 1
    CH_UP = 2
    CH_DOWN = 3
    VO_UP = 4
    VO_DOWN = 5


class button:
    value = 0

    def up(self):
        self.value += 1

    def down(self):
        if (0 < self.value):
            self.value -= 1

    def info(self):
        return self.value


class display_panel:
    broadcasting = LGUPlus()

    def __init__(self) -> None:
        self.made_in = "samsung"
        self.serial_number = "20220506"

    def display_contents(self, number):
        print("-----------------------------------------------")
        print("|                                             |")
        print("|", self.broadcasting.get_chanel_content(number))
        print("|                                             |")
        print("-----------------------------------------------")


"""
    전파
"""

power_button_signal = True
ch_button_up_signal = False
ch_button_down_signal = False
vo_button_up_signal = False
vo_button_down_signal = False


"""
    TV 정의
"""


class TV:
    power_flag = True
    power_button = button()
    channel_button = button()
    volume_button = button()
    display = display_panel()

    def __init__(self) -> None:
        th.Thread(target=remote_controller, args=(),
                  name='remote_controller', daemon=True).start()

    def start(self):
        """
        사용할 전역 변수 참조 선언
        """
        global power_button_signal
        global ch_button_up_signal
        global ch_button_down_signal
        global vo_button_up_signal
        global vo_button_down_signal

        while False != self.power_flag:
            # 시그널 처리
            if power_button_signal == False:
                self.power_flag = False
            elif ch_button_up_signal == True:
                print("채널 업")
                self.channel_button.up()
                ch_button_up_signal = False
            elif ch_button_down_signal == True:
                print("채널 다운")
                self.channel_button.down()
                ch_button_down_signal = False
            elif vo_button_up_signal == True:
                print("볼륨 업")
                self.volume_button.up()
                vo_button_up_signal = False
            elif vo_button_down_signal == True:
                print("볼륨 다운")
                self.volume_button.down()
                vo_button_down_signal = False
            os.system('clear')
            print("made in : ", self.display.made_in,
                  " serial : ", self.display.serial_number)
            print(
                "메뉴 : 0(power OFF), 1(power ON), 2(CH UP), 3(CH DOWN), 4(VO UP), 5(VO DOWN)")
            print("info : ch : ", self.channel_button.info(), "vo : ",
                  self.volume_button.info())
            self.display.display_contents(self.channel_button.info())
            time.sleep(1)


"""
    리모콘
"""


def remote_controller():
    while True:
        str_key = input()
        key = int(str_key)
        global power_button_signal
        global ch_button_up_signal
        global ch_button_down_signal
        global vo_button_up_signal
        global vo_button_down_signal
        if button_status['OFF'].value == key:
            power_button_signal = False
        elif button_status['ON'].value == key:
            power_button_signal = True
        elif button_status['CH_UP'].value == key:
            ch_button_up_signal = True
        elif button_status['CH_DOWN'].value == key:
            ch_button_down_signal = True
        elif button_status['VO_UP'].value == key:
            vo_button_up_signal = True
        elif button_status['VO_DOWN'].value == key:
            vo_button_down_signal = True


"""
    main 함수 정의
"""
if __name__ == "__main__":
    tv = TV()
    tv.start()
728x90
반응형