[Python] 클래스 선언과 상속

반응형
    반응형

    클래스 작성방법 위주로 설명을 하겠습니다.

     

    예제는 'Byte of ptyhon' 을 참고했습니다.

     

    class Person:
        pass
    p = Person()
    print(p)

    클래스는 객체를 가지고 하나의 오브젝트를 만드는 것입니다. object로써 정의됩니다.

    class Person:
        def __init__(self, name):
            self.name = name
        def say_hi(self):
            print( 'Hello, my name is', self.name)
    p = Person('Swar')
    p.say_hi()

    def를 정하고 그 안에 say_hi 라는 함수를 정의하면 클래스 안에 있는 say_hi 함수를 위와 같이 사용할 수 있습니다.

    init 함수를 클래스에 거의 대부분 넣는데 그 이유는 파이썬 중에서는 초기값이 존재해야 코딩이 진행되는 경우가 있습니다. 클래스에서도 마찬가지인데 그 초기값을 넣을 필요가 있을경우 init 함수를 만들어 초기값들을 넣습니다.

    self 는 자기 자신을 얘기하는데 클래스 자기자신을 의미합니다. 일종의 소속 밝히기로써 생각하면 될것 같습니다.

    아무튼 Person('name') 을 넣어 p.say_hi()를 했더니 우리가 정의해놓은 say_hi의 함수로 나오는 것을 볼 수 있습니다.

     


    상속

    파이썬이 객체 지향 프로그래밍이기 때문에 코드 재사용이 가능합니다. 이를 위한 방법으로 상속을 사용합니다.

    class SchoolMember:
        def __init__(self, name, age):
            self.name = name
            self.age = age
            print('(Initialized SchoolMember:{})'.format(self.name))
        def tell(self):
            print ('Name:"{}" Age:"{}"'.format(self.name, self.age))
    
    class Teacher(SchoolMember):
        def __init__(self, name, age, salary):
            SchoolMember.__init__(self, name, age)
            self.salary = salary
            print('(Initialized Teacher:{})'.format(self.name))
        def tell(self):
            SchoolMember.tell(self)
            print ('Salary:"{}"'.format(self.salary))
    class Student(SchoolMember):
        def __init__(self,name,age,marks):
            SchoolMember.__init__(self, name, age)
            self.marks = marks
            print('(Initialized Student:{})'.format(self.name))
        def tell(self):
            SchoolMember.tell(self)
            print ('Marks:"{}"'.format(self.marks))
            
    t = Teacher('Mrs.Shrividya',40,30000)
    s = Student('Sar', 25,75)
    members = [t, s]
    for member in members:
        member.tell()

     

    어느 학교의 교사와 학생들의 명단을 작성하는 프로그램을 만들다고 하면 교사의 정보와 학생의 정보를 다르게 구분해야합니다. 아마 정보의 내용도 약간 다를겁니다. 이런 부분을 적용해서 교사와 학생의 명단을 따로 작성해야 합니다.

    그런데 공통적인 것도 있습니다. 이름, 나이, 주소 등은 교사와 학생 모두 공통적으로 적어내야 하는 정보입니다.

    이런 상황에서 명단을 두 클래스를 단순히 만들면 공통적인 정보를 가져오기 위한 코딩을 두 번 해야합니다.

      두 번 써야 하는 불편함을 줄이기 위해 위의 예에서는 SchoolMember 라는 공통 클래스를 생성한 후 상속이라는 방법으로 교사와 학생의 클래스에 적용했습니다. 어떻게 상속을 하는지 위의 예제를 보면 알겠지만 Teacher와 Student 클래스 옆에 (SchoolMember)를 붙이고 SchoolMember.~~ 으로 필요한 정보를 가져옵니다.

    이런 방식이 상속입니다. 즉, 기존 클래스에서 작성한 코드를 다른 클래스에서 재사용 하는 방법입니다.

      하지만 모든 상속을 다 이룰 필요는 없습니다. 교사의 연봉을 적고 싶고 학생은 성적을 적고 싶은데 서로 다른 정보이기 때문에 다르게 정의해야 하는 상황이 옵니다. 이를 위해서 부모 클래스인 SchoolMember에서의 tell 정의를 각 클래스에서 다시 정의를 하게 되면서 해결할 수 있습니다. 이렇게 부모 클래스의 method 재정의를 method override라고 합니다.

     

    물론 클래스의 많은 기능들이 더 있지만 여기까지 포스팅하겠습니다. 읽어주셔서 감사합니다.

    'Python > 기초' 카테고리의 다른 글

    [Anaconda]가상환경 설치,삭제(32bit 포함)  (2) 2020.08.14
    [Python] 예외처리  (0) 2020.04.18
    [Python] 간단 용어 정리  (0) 2020.04.14
    [Python] Lambda(람다) 함수  (0) 2020.04.12
    [Python] 전역변수, 지역변수  (0) 2020.04.09

    댓글

    Designed by JB FACTORY

    ....