스페셜 메서드
파이썬의 스페셜 메서드 (또는 매직 메서드라고도 불림)는 더블 언더스코어(__)로 시작하고 끝나는 메서드 이름을 갖습니다. 이 메서드들은 특정 구문이나 내장 함수를 사용할 때 파이썬 인터프리터에 의해 자동으로 호출됩니다.
예를 들어, 객체에 대해 + 연산자를 사용하면 해당 객체의 __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("유효하지 않은 주민등록번호입니다.")