Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

기록

OOP_in_python 본문

공부

OOP_in_python

aoieuo 2020. 9. 30. 16:53

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
"""
Comments