Insight
1. str, repr의 차이와 쓰임새
2. 절차 지향, 객체 지향의 차이와 쓰임새
All Code Info : https://github.com/DevRyu/DaliyCode/blob/master/OOPpython/Day01.py
1. 절차지향 VS 객체지향
절차 지향 => 함수적 프로그래밍
절차 지향적인 코딩 스타일
위에서 아래로 읽는다
student_1 = "kim"
student_11 = 1
student_111 = [ {'hi':'how' }]
student_2 = "kim"
student_22 = 1
student_222 = [ {'hi':'how' }]
student_3 = "kim"
student_33 = 1
student_333 = [ {'hi':'how' }]
리스트 구조
관리하기 불편하고 위치 인덱스를 맵핑해서 사용해야 합니다.
tudent_list = ['kim', 'lee', 'park']
student_grade_list = [1, 2, 3]
student_details_list = [
{'gender': 'a', 'score' : 100, 'score2' : 100 }
]
리스트 인덱스 삭제시 아래와 같이 해야 합니다.
del student_list[0]
del student_grade_list[1]
딕셔너리 구조에서도 마찬가지로 인덱스로 접근하는 불편함이 있습니다.
students_dicts = [
{'name' : 'kim' , 'gender': 'male' , 'student_detail' : {
'math': '100', 'english' : '89'}
},
{'name' : 'ja' , 'gender': 'male' , 'student_detail' : {
'math': '100', 'english' : '89'}
}
]
del students_dicts[1]
클래스 구조는 어떨가요
구조 설계 후 재사용성 증가, 코드 반복 최소화, 메소드 활용이 가능합니다
class Student():
# 속성(생성자)
def __init__(self, name, number, grade, details):
self._name = name
self._number = number
self._grade = grade
self._details = details
# 행위(메서드)
def __str__(self):
return 'str : {} : {}'.format(self._name, self._number)
파이썬의 모든 객체는 딕셔너리 형태로 가집니다.
그래서 딕셔너리 메서드를 쓰면 키 벨류 형태로 리턴합니다.
student1 = Student('a',1,1, {'details':'male'})
student2 = Student('b',2,2, {'details':'male'})
student3 = Student('c',3,3, {'details':'female'})
print(student1)
print(student2.__dict__)
위의 객체의 인스턴스들을 리스트에 담아서 호출 가능
stu_list = []
stu_list.append(student1)
stu_list.append(student2)
stu_list.append(student3)
#객체만 알려준다.
print(stu_list)
클래스 내에 __str__ 매직 메서드와 repr메서드을 비교 해보겠습니다.
def __repr__(self):
return 'repr : {} : {}'.format(self._name, self._number)
str이 없으면 repr을 호출해준다.
str과 repr의 차이는 str은 print문에 의한 출력과 동알한 문자열입니다.
str은 객체의 비공식적인 문자열 출력입니다.
사용자가 보기쉬운형태{보기쉽게 생략이 될 수도 있다.
예) s = Hello, World!
repr은 객체의 공식적인 문자열 출력이다
파이썬의 인터프린터가 해당 객체가 되어 인스턴스를 만들 수 있는 문자열
예) 소수점이 얼마나 찍히든 다 출력해준다.
그러므로 가지는 차이는
s = "Hello, World!"
print(str(s)) # Hello, World!
print(repr(s)) # 'Hello, World!'
입니다.
차이는 출력되는 형식이 str인 경우 '' 문자열기호가 없이 출력된 것이고
파이썬의 프로그래밍에서 원하는 출력 결과가 문자열이 없는 common한 결과를 얻기 위함이면
str로 리턴해야합니다.
클래스에서 선언을 안하고 그냥 문자열을 하나 선언해서 보면 어떨가요?
s = 'Hello world'
print(s) # hello world
str형태로 출력이 됩니다.
위의 설명했듯 문자열이 출력 되야 한다면 repr로 사용하면 됩니다.
'Language > Python' 카테고리의 다른 글
RePythonOOP 6일차 네임드 튜플 클래스 응용 해 보기 (0) | 2019.12.04 |
---|---|
RePythonOOP 4일차 파이썬의 데이터 모델 , 네임드 튜플 , 속성과 메소드 들 (0) | 2019.11.30 |
RePythonOOP 3일차 객체의 메서드들 ( 클래스 메서드, 인스턴스 메서드, 스테틱 메서드) (0) | 2019.11.28 |
RePythonOOP 2일차 클래스 상세( 인스턴스, 클래스 변수, 인스턴스 변수, 클래스 설계 ) (0) | 2019.11.27 |
파이썬의 인자와 파라미터 그리고 다양한 종류 (0) | 2019.10.05 |