반응형
객체 매직 키워드 init, repr, str, python, 파이썬¶
__init__
¶
In [1]:
class Student:
# __init__은 입력 변수를 설정할 때 사용합니다
# name, grade, gender 3개의 입력 변수를 받는 Student 클래스 생성
# print 함수를 이용하여 임시적으로 name, grade, gender를 프린트하게 합니다.
def __init__(self, name, grade, gender):
self.name = name
self.grade = grade
self.gender = gender
print(name)
print(grade)
print(gender)
In [2]:
student = Student("James", "3", "Male")
print(student)
James 3 Male <__main__.Student object at 0x7fcf6efa1640>
__repr__
¶
In [3]:
class Student:
def __init__(self, name, grade, gender):
# __init__은 입력 변수를 설정할 때 사용합니다
# name, grade, gender 3개의 입력 변수를 받는 Student 클래스 생성
self.name = name
self.grade = grade
self.gender = gender
def __repr__(self):
# 객체에 대한 설명을 좀더 명확히 하기 위해 __repr__을 사용합니다.
# Student 문자열을 입력 변수 앞에 작성합니다.
return f'Student("{self.name}","{self.grade}","{self.gender}")'
In [4]:
student = Student("James", "3", "Male")
student
Out[4]:
Student("James","3","Male")
__str__
¶
In [5]:
class Student:
def __init__(self, name, grade, gender):
# __init__은 입력 변수를 설정할 때 사용합니다
# name, grade, gender 3개의 입력 변수를 받는 Student 클래스 생성
self.name = name
self.grade = grade
self.gender = gender
def __str__(self):
# 객체에 대한 설명을 좀더 명확히 하기 위해 __str__을 사용합니다.
return f'학생("{self.name}","{self.grade}","{self.gender}")'
In [6]:
student = Student("James", "3", "Male")
# str 은 print 문을 입력하지 않을 경우 보여지지 않습니다.
print(student)
학생("James","3","Male")
__repr__
vs __str__
¶
- 둘의 사용 목적이 매우 유사해서 비교해 차이점을 비교해 볼 필요성이 있습니다.
- 일단,
__repr__
은 개발자에게 객체를 자세히 설명하기 위해 주로 사용되고,__str__
은 일반적인 사용자가 이해하기 쉬운 언어로 작성되는 데 그 목적이 있습니다.
chatGPT 가 설명하는 차이는 아래와 같습니다.¶
__repr__
- 주로 개발자를 위한 문자열 표현으로, 대화형 인터프리터에서 객체를 입력하거나 repr() 함수를 사용하여 호출됩니다.
- 객체의 "공식적인" 표현을 반환하며, 가능한 경우 반환된 문자열을 사용해 동일한 객체를 생성할 수 있어야 합니다.
- 객체에 repr 메서드만 정의되어 있고 str 메서드가 정의되어 있지 않은 경우, str() 함수와 print() 함수에서도 repr 메서드가 호출됩니다.
__str__
- 주로 최종 사용자를 위한 문자열 표현으로, str() 함수와 print() 함수를 사용하여 호출됩니다.
- 객체의 "비공식적인" 표현을 반환하며, 일반적으로 사용자가 이해하기 쉬운 형태로 표현됩니다.
- 객체에 str 메서드가 정의되어 있지 않은 경우, 파이썬은 repr 메서드를 대신 호출합니다.
In [7]:
class Student:
def __init__(self, name, grade, gender):
# __init__은 입력 변수를 설정할 때 사용합니다
# name, grade, gender 3개의 입력 변수를 받는 Student 클래스 생성
self.name = name
self.grade = grade
self.gender = gender
def __repr__(self):
# 객체에 대한 설명을 좀더 명확히 하기 위해 __repr__을 사용합니다.
# Student 문자열을 입력 변수 앞에 작성합니다.
return f'Student("{self.name}","{self.grade}","{self.gender}")'
# 객체에 대한 설명을 좀더 명확히 하기 위해 __str__을 사용합니다.
# Student 문자열을 입력 변수 앞에 작성합니다.
def __str__(self):
return f'학생("{self.name}","{self.grade}","{self.gender}")'
In [8]:
# __repr__ 과 __str__ 이 동시에 사용되면 print를 통해 __str__ 내용이 출력됩니다
student = Student("James", "3", "Male")
print(student)
학생("James","3","Male")
In [9]:
# print(repr(student)) 와 같이 repr을 호출하고 프린트 하면 __repr__ 내용이 출력됩니다.
print(repr(student))
Student("James","3","Male")