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 Student(object):
pass
상단Student
은 클래스 이름을 대표하고 object
은 계승하는 클래스를 대표한다. 여기는 서로 다른 클래스를 계승할 수 있다. 만약에 계승 클래스가 없다면 모든 클래스의 공유 계승 클래스object
를 사용하고 pass
에 클래스의 내용을 쓴다. 이것이 바로 클래스를 만드는 일반 형식이다.bart=Student('Bart',67)
클래스에 데이터를 전달한 후에 클래스는 하나의 대상으로 실례화되었다. 예를 들어 위의bart는 하나의 대상에 속하고 이 대상은 name
과score
두 가지 속성을 포함하고 또 하나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
는 전달할 필요가 없다.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
>>>
. 현재 우리는 클래스name
와 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))
. 이제 외부에서 접근>>> 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'
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
#2_Raspberry Pi 3B+에서 LINE에 일기 예보 알림도쿄에 와서 갑자기 비가 오는 경우가 많습니다. "아침 제대로 일기 예보를 체크해 두면..."라고 후회하는 것이 자주. LINE에 매일 아침 일기 예보를 보내 주시면 좋지 않아? 라고 생각하고 만들어 보기로 했습니다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.