Python Basic 12: 객체용 프로그래밍 1: 클래스 및 인스턴스

Python Basic 12: 객체용 프로그래밍 1: 클래스 및 인스턴스
파이썬 기초 시리즈 내용은 류설봉 선생님 파이썬 3 강좌의 기록을 배우는 것입니다. 류설봉 선생님 홈페이지 주소: 류설봉 파이썬 3 강좌Author:yooongchun Email:[email protected]
  • 대상방향 프로그래밍 소개: 대상방향 프로그래밍Object Oriented Programming은 OOP라고 약칭하며 과정방향 프로그래밍과 구별되는 새로운 프로그래밍 사상이다.OOP는 대상을 프로그램의 기본 단원으로 하고 하나의 대상은 데이터와 조작 데이터의 함수를 포함한다.Python의 모든 데이터 형식은 대상으로 볼 수도 있고 사용자 정의로 볼 수도 있습니다.사용자 정의 대상 데이터 유형은 대상을 대상으로 하는 클래스class 개념이다.예: 대상을 대상으로 하는 프로그램 설계 사상을 이용하여 학생 정보(성명과 성적)를 저장하는 표를 디자인하여 차이점을 나타내기 위해 우리는 먼저 프로세스를 대상으로 하는 프로그램으로 구성한다.
    stu1={'name':'Alex','score':98}
    stu2={'name':'Bob','score':89}
    ...
    그리고 함수를 이용하여 학생 정보
    def print_score(stu):
      print('%s:%s' %(stu['name'],stu['score']))
    를 처리한다. 위의 코드는 프로세스를 대상으로 하는 저장 데이터부터 데이터 사용 과정까지 간단하게 보여준다.이어서 우리는 대상을 대상으로 하는 프로그램 설계 사상으로 실현한다.우선, 우리는 데이터를 어떻게 저장하는지를 고려한다. 우리는 학생들을 하나의 대상으로 간주한다. 그러면 이름과 성적은 이 대상의 두 가지 속성이고 데이터를 사용하면 대상에 속하는 한 방법이다. 우리는 위의 내용을 코드로 바꾸면 다음과 같다.
    class Student(object):
      def __init__(self,name,score):
          self.name=name
          self.score=score
    
      def print_score(self):
          print('%s:%s' %(self.name,self.score))
    위의 코드에서 우리는 Student류(대상)를 구축했고 대상을 구성하는 방법(Method)print_score도 만들었다.이제 우리는 실례화(Instance) 대상
    bart=Student('Bart',67)
    lisa=Student('Lisa',88)
    에서 대상을 호출하는 방법
    bart.print_score()
    lisa.print_score()
    을 실행할 수 있다.
    >>> from stu import Student
    >>> bart=Student('Bart',67)
    >>> lisa=Student('Lisa',88)
    >>> bart.print_score()
    Bart:67
    >>> lisa.print_score()
    Lisa:88
    >>>
    그러면 우리는 대상 프로그램 설계의 첫 번째 프로그램을 완성할 수 있다.이를 통해 알 수 있듯이 이런 프로그램 설계 사상의 추상적인 정도는 함수보다 높다. 왜냐하면 데이터도 포함하고 데이터를 조작하는 방법도 포함하기 때문이다.
  • 클래스와 실례: 대상을 대상으로 하는 가장 중요한 개념은 클래스(Class)와 실례(Instance)이다.클래스는 추상적인 템플릿이고 실례는 클래스에 따라 만들어진 구체적인 대상이다.클래스 정의의 일반 형식은 앞에서 만든 Student 클래스를 예로 들면
    class Student(object):
      pass
    상단Student은 클래스 이름을 대표하고 object은 계승하는 클래스를 대표한다. 여기는 서로 다른 클래스를 계승할 수 있다. 만약에 계승 클래스가 없다면 모든 클래스의 공유 계승 클래스object를 사용하고 pass에 클래스의 내용을 쓴다. 이것이 바로 클래스를 만드는 일반 형식이다.
  • 실례화 클래스의 일반 형식은 학생트 클래스를 예로 들면
    bart=Student('Bart',67)
    클래스에 데이터를 전달한 후에 클래스는 하나의 대상으로 실례화되었다. 예를 들어 위의bart는 하나의 대상에 속하고 이 대상은 namescore 두 가지 속성을 포함하고 또 하나print_score() 방법이 있다.하나의 실례에 자유로운 귀속 속성을 줄 수 있다. 예를 들어bart 실례에 하나의gender 속성
    >>> bart.gender='male'
    >>> bart.gender
    'male'
    을 추가할 수 있고 일부 속성은 우리가 반드시 필요하다고 생각하기 때문에 특수한 __init__ 방법을 통해 강제로 입력할 수 있다. 예를 들어 앞의
    def __init__(self,name,score):
          self.name=name
          self.score=score
    에 주의해서 여기의 __init__는 앞뒤 두 개의 밑줄이다.또한 __init__ 방법의 첫 번째 매개 변수는 영원히self로 만들어진 실례 자체를 나타낸다.실례화 대상을 할 때 __init__ 방법과 대응하는 매개 변수를 전달해야 하지만 self는 전달할 필요가 없다.
  • 데이터 봉인이 대상을 대상으로 프로그래밍하는 중요한 특징은 데이터 봉인이다.우리는 그래도 앞에서 정의한 Student 종류를 통해 볼 수 있다.프로세스를 위한 프로그램 설계에 대해 우리가 데이터의 저장을 완성한 후에 데이터에 대한 조작을 실현하려면 우리는 보통 방법을 정의한다. 예를 들어
    def print_score(stu):
          print('%s:%s' %(stu.name,stu.score))
    처럼 방법과 데이터는 독립적이다. 그러나 클래스의 개념을 사용한 후에 우리는 이 방법을 클래스에 봉인한다. 이렇게 하면 이런 방법을 호출하는 것은 다음과 같다.
    stu.print_score()
    우리는 조작 대상의 방법에만 관심을 가진다.그 내부가 어떻게 이루어지는지에 관심이 없는 것이 포장의 장점이다.클래스 내부에서 쓰는 방법도 첫 번째 인자self로 설정해야 하며, 다른 인자 등은 일반 함수와 완전히 같으며, 호출할 때도self 인자를 전송하지 않아도 된다.
  • 접근 제한: 파이톤은 변수 앞에 두 개의 밑줄을 추가해서 변수를 사유private로 표시한다. 예를 들어 앞에 있는 Student는 현재 외부에서 내부 코드를 수정할 수 있다
    >>> bart=Student('Bart',99)
    >>> bart.score=78
    >>> bart.score
    78
    >>>
    . 현재 우리는 클래스namescore에 속하는 추가__, 외부에서 접근할 수 없게 한다
    class Student(object):
    def __init__(self,name,score):
        self.__name=name
        self.__score=score
    def print_score(self):
        print('%s:%s' %(self.__name,self.__score))
    . 이제 외부에서 접근
    >>> bart=Student('Bart',99)
    >>> bart.__name
    Traceback (most recent call last):
    File "", line 1, in 
    AttributeError: 'Student' object has no attribute '__name'
    를 시도해 보자. 프로그램이 잘못 보고된 것을 알 수 있다.추가__를 통해 프로그램은 변수를 사유로 명시했다. 이때 우리는 프로그램 내부에 공유 함수(public를 제공하여 외부에서 사용하도록 한다
    def getName(self):
        return self.__name
    def setName(self,name):
        self.__name=name
    . 그러면 내부의 변수를 완전히 봉인한다.
    >>> bart=Student('Bart',99)
    >>> bart.setName('BART')
    >>> bart.getName()
    'BART'
  • 좋은 웹페이지 즐겨찾기