본문 바로가기

카테고리 없음

6일차-3

 스페셜 메서드

 

파이썬의 스페셜 메서드 (또는 매직 메서드라고도 불림)는 더블 언더스코어(__)로 시작하고 끝나는 메서드 이름을 갖습니다. 이 메서드들은 특정 구문이나 내장 함수를 사용할 때 파이썬 인터프리터에 의해 자동으로 호출됩니다.

예를 들어, 객체에 대해 + 연산자를 사용하면 해당 객체의 __add__ 메서드가 호출됩니다. 또는 len() 함수를 사용하면 __len__ 메서드가 호출됩니다.

class Book:
  def __init__(self,title):
    self.title=title
book = Book('미친듯이 재밌는 파이썬')
print(book)
print(str(book))
<__main__.Book object at 0x7e5fcb00ae90>
<__main__.Book object at 0x7e5fcb00ae90>
class Book:
  def __init__(self,title):
    self.title=title
  def __str__(self): #str은 object클래스에 정의 되있음
    return self.title
book = Book('미친듯이 재밌는 파이썬')
print(book)
print(str(book))
미친듯이 재밌는 파이썬
미친듯이 재밌는 파이썬

 

class Calc:
  def __init__(self,value):
    self.value=value
  def __add__(self,other):
    return self.value + other.value
num1=Calc(5)
num2 = Calc(10)
result=num1 + num2
print(result)
15

 

class Queue:
  def __init__(self):
    self.items=[1,2,3,4,5]

  def __len__(self):
    return len(self.items)
queue=Queue()
print(queue)
print(len(queue))
<__main__.Queue object at 0x7e5fcb00b190>
5
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __getitem__(self, index):
        if index == 0:
            return self.x
        elif index == 1:
            return self.y
        else:
            return -1
pt = Point(5,3)
print(pt[0])
print(pt[1])
print(pt[10])
5
3
-1
class CallableObject:
    def __call__(self, *args, **kwargs): # *는 가변형 갯수 상관없음 **변수값을 이루어진 값으로 전달 딕셔너리로 받음
        print(f"Called with arguments: {args} and keyword arguments: {kwargs}")
callable_obj = CallableObject()
callable_obj(10,20,30,40,50, userid='apple',age=20, gender='여자')
Called with arguments: (10, 20, 30, 40, 50) and keyword arguments: {'userid': 'apple', 'age': 20, 'gender': '여자'}

 

주민등록번호 유효성 검사 프로그램을 만들어보자.
* 0 0 1 0 1 1 - 3 0 6 8 5 1 8
* 각 자리에 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5 를 곱하고 더함(마지막 주민등록번호 숫자는 제외)
  * 0+0+4+0+6+7+24+0+12+24+20+5 =102
* 11로 나눈 나머지 값을 구함
  * 102 % 11= 3
* 11에서 위 값을 뺌
 * 11 - 3 = 8
* 위 결과가 2자리인 경우 10으로 나눈 나머지값을 구함
* 결과 값이 마지막 주민등록번호와 일치하면 유효한 주민번호

> 단, 클래스로 설계하고 객체를 이용하여 프로그램을 동작

 

class id:
    def __init__(self, id_number):
        self.id_number = id_number

    def validate(self):
        # 주민등록번호 유효성 검사 수행
        if len(self.id_number) != 13:
            return False
       
        # 주민등록번호 유효성 검사에 필요한 계산 수행
        multipliers = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5]
        checksum = sum(int(self.id_number[i]) * multipliers[i] for i in range(12))
        remainder = checksum % 11
        result = 11 - remainder if remainder != 0 else 1
       
        # 마지막 번호와 일치하는지 확인
        return result % 10 == int(self.id_number[-1])

# 테스트
if __name__ == "__main__":
    id_number = input("주민등록번호를 입력하세요 (13자리 숫자): ")
    validator = id(id_number)
    if validator.validate():
        print("유효한 주민등록번호입니다.")
    else:
        print("유효하지 않은 주민등록번호입니다.")