OOP
클래스
구조 설계 후 재사용성 증가, 코드 반복이 최소, 메서드 활용 가능
class Student(object):
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)
def __repr__(self):
return 'repr : {}'.format(self._name)
student1 = Student('kim', 1, 1, {'gender':'male', 'score1': 95, 'score2': 88})
student2 = Student('lee', 2, 2, {'gender':'female', 'score1': 77, 'score2' : 92})
print(student1.__dict__)
# {'_name': 'kim', '_number': 1, '_grade': 1, '_details': {'gender': 'male', 'score1': 95, 'score2': 88}}이 출력됨
student_list = []
students_list.append(student1)
students_list.append(student2)
print(students_list)
#[<__main__.Student object at 0x10298f208>, <__main__.Student object at 0x10298f240>] 이 출력됨
for x in students_list:
print(x)
"""출력 결과
str : kim
str : lee
"""
#만약 클래스 안에 __str__과 __repr__ 메서드가 있으면
#해당 클래스 참조변수를 호출했을 때 __Str__의 반환값이 출력된다.
#만약 클래스 안에 __str__메서드가 정의되지 않았을 경우에는
#대신해서 __repr__ 메서드가 호출된다.
#그럼 처음부터 __repr__을 호출하고 싶을 땐?
for x in students_list:
print(repr(x))
이렇게 하면 된다링
클래스 변수, 인스턴스 변수
새로운 클래스 선언
class Student(object):
#클래스 주석!!
"""
Student Class
Author: Kayoung Yoon
Date: 2020-09-19
"""
student_count = 0
def __init__(self, name, number, grade, details, email=None):
self._name = name
self._number = number
self._grade = grade
self._details = details
self._email = email
Student.student_count += 1
def __str__(self):
return 'str : {}'.format(self._name)
def __repr__(self):
return 'repr : {}'.format(self._name)
def detail_info(self):
print('Current Id: {}'.format(id(self)))
print('Student Detail Info : {} {} {}'.format(self._name, self._email, self._details))
def __del__(self):
Student.student_count -= 1
self는 자바의 this와 비슷한 것 같다. 객체 자기자신을 참조할 때 쓰는..?
dir(), __dict__, __doc__
print(dir(student1)) # 파이썬에서 내려주는 모든 속성을 리스트로 반환
"""
['__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__',
'__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__',
'__new__', '__reduce__', '__reduce_ex__',
'__repr__', '__setattr__', '__sizeof__',
'__str__', '__subclasshook__', '__weakref__',
'_details', '_email', '_grade', '_name', '_number', 'detail_info',
'student_count']
"""
print(student1.__dict__) # 인스턴스의 속성과 값을 딕셔너리로 반환
"""
{'_name': 'Cho', '_number': 2, '_grade': 3,
'_details': {'gender': 'Male', 'score1': 65, 'score2': 44}, '_email': None}
"""
print(Student.__doc__) # Student 클래스의 주석을 확인한다.
"""
Student Class
Author: Kayoung Yoon
Date: 2020-09-19
"""