파이썬

파이썬 class 클래스

초롱씨 2023. 11. 10. 16:55
728x90
반응형

클래스

  • class 클래스 이름:
  • def init(): #생성자
  • def 메소드 이름():… #메소드

모든 메소드에 사용 유무와 상관없이 self 파라미터가 첫번째로 들어가야 한다.

class Counter:
    # count =0
    count_a=0
    def __init__(self):
        self.count = 0
    def increment(self):
        self.count+=1
    def print_count(self):
        print(self.count)
a= Counter()
a.increment()
a.print_count()

1

 

a.count_a= 5
class Counter:
    def __init__(self, initValue=0):
        self.count= initValue
    def increment(self):
        self.count+=1
    def print_count(self):
        print(self.count)
a = Counter()
a.increment()
a.print_count()

1

 

b=Counter(100)
b.increment()
b.print_count()

101

 


class CustomerInfo:
    def __init__(self):
        self.customers = list()
        self.index = -1

    def print_menu(self):
        return input('''
            다음 중에서 하실 작업의 메뉴를 입력하세요.
            I - 고객 정보 입력
            P - 이전 고객 정보 조회
            C - 현재 고객 정보 조회
            N - 다음 고객 정보 조회
            U - 현재 고객 정보 수정
            D - 현재 고객 정보 삭제
            Q - 프로그램 종료
        ''').upper()



    def chk_input_data(self, msg, func):
        while True:
            x = input(msg).upper()
            if func(x):
                break
            else:
                print('잘못입력하셨습니다. 다시 입력 해 주세요.')
        return x
    def do_I(self):
        print('고객정보 입력')
        customer = { 'name':'', 'gender': '', 'email': '', 'year': 0 }

        customer['name'] = self.chk_input_data('이름을 입력하세요 : ',
                                          lambda x: True if len(x) > 2 else False)
        customer['gender'] = self.chk_input_data('성별 (M/F)를 입력하세요 : ',
                                            lambda x: True if x in ('M', 'F') else False)
        customer['email'] = self.chk_input_data('이메일 주소를 입력하세요 : ',
                                           lambda x: True if '@' in x else False)
        customer['year'] = self.chk_input_data('출생년도 4자리 입력하세요 : ',
                                          lambda x: True if len(x) == 4 and x.isdigit() else False)

        self.customers.append(customer)
        self.index = len(self.customers) - 1

    def do_P(self):
        print('이전 고객 정보 조회')
        if self.index <= 0:
            print('이전 데이타로 이동 불가.')
            print(self.index)
        else:
            self.index -= 1
            print(f'{self.index + 1}번째 고객 정보 입니다.')
            print(self.customers[self.index])


    def do_C(self):
        print('현재 고객 정보 조회')
        if self.index >= 0:
            print(f'{self.index + 1}번째 고객 정보 입니다.')
            print(self.customers[self.index])
        else:
            print('입력된 정보가 없습니다. 정보 입력은 I를 선택하세요.')


    def do_N(self):
        print('다음 고객 정보 조회')
        if self.index >= (len(self.customers) - 1):
            print('이후 데이터 이동 불가')
            print(self.index)
        else:
            self.index += 1
            print(f'{self.index + 1}번째 고객 정보 입니다.')
            print(self.customers[self.index])


    def do_U(self):
        print('현재 고객 정보 수정')
        customer = { 'name':'', 'gender': '', 'email': '', 'year': 0 }
        customer['name'] = input('이름을 입력하세요 : ')
        while True:
            customer['gender'] = input('성별 (M/F)를 입력하세요 : ').upper()
            if customer['gender'] in ('M', 'F'):
                break
            else:
                print('잘못입력하셨습니다. 다시 입력 해 주세요.')
        while True:
            customer['email'] = input('이메일 주소를 입력하세요 : ')
            golbang = '@' in customer['email']
            if golbang:
                break
            else:
                print('"@"를 포함한 이메일 주소를 입력하세요.')

        while True:
            customer['year'] = input('출생년도 4자리 입력하세요 : ')
            check = len(customer['year']) == 4 and customer['year'].isdigit()
            if check:
                break
            else:
                print('잘 입력 해라....')
        self.customers[self.index] = customer


    def do_D(self):
        print(f'현재 고객 정보{self.customers[self.index]["name"]} 삭제')
        del self.customers[self.index]

# Main
def main():
    start = CustomerInfo()
    while True:
        menu = start.print_menu()
        if menu == 'I':
            start.do_I()
        elif menu == 'P':
            start.do_P()
        elif menu == 'C':
            start.do_C()
        elif menu == 'N':
            start.do_N()
        elif menu == 'U':
            start.do_U()
        elif menu == 'D':
            start.do_D()
        elif menu == 'Q':
            print('안녕히가세요~')
            break
        else:
            print('잘못 입력하셨습니다. 다시 입력 해주세요')

if __name__ == '__main__':
    main()
728x90
반응형