1번째 줄: |
1번째 줄: |
| + | <youtube>https://www.youtube.com/watch?v=JtQRWgcC_ZQ</youtube> |
| | | |
| ==개요== | | ==개요== |
4번째 줄: |
5번째 줄: |
| | | |
| 같은 형태의 데이터를 여러 번 사용해야 할 때 사용한다. 사용자 정보라든가, 게임 케릭터 스테이터스라든가. | | 같은 형태의 데이터를 여러 번 사용해야 할 때 사용한다. 사용자 정보라든가, 게임 케릭터 스테이터스라든가. |
| + | |
| + | ex) 붕어빵틀? |
| ===정의=== | | ===정의=== |
| <syntaxhighlight lang="python"> | | <syntaxhighlight lang="python"> |
17번째 줄: |
20번째 줄: |
| 클래스 내부에 정의된 함수는 메서드라는 이름으로 구분한다. | | 클래스 내부에 정의된 함수는 메서드라는 이름으로 구분한다. |
| | | |
− | 특수메서드. 생성자.
| + | 메서드를 정의할 땐 가장 처음에 self라는 인수를 받아야 한다. 메서드의 첫 번째 인자로 인스턴스가 전달되기 때문에 self를 지정해두지 않으면 한 변수에 2개의 데이터가 담겨 에러가 발생한다. |
| + | |
| + | == 지정메서드 == |
| + | 모든 클래스가 공유하는 메서드이다. |
| {| class="wikitable" | | {| class="wikitable" |
| |+ | | |+ |
27번째 줄: |
33번째 줄: |
| |생성자 | | |생성자 |
| |__init__ | | |__init__ |
− | |클래스가 생성되면 실행되는 메서드이다. | + | |인스턴스가 생성되면 실행되는 메서드이다. 일반적으로 인스턴스 변수를 정의하는 데 사용. |
| 들어가야 할 변수를 지정하여, 처음 생성 때 무조건 변수를 받아야 할 경우에 사용한다. | | 들어가야 할 변수를 지정하여, 처음 생성 때 무조건 변수를 받아야 할 경우에 사용한다. |
| + | |
| + | (클래스에 입력하는 것은 여기에 정의하여 사용한다.) |
| |<syntaxhighlight lang="python"> | | |<syntaxhighlight lang="python"> |
| def __init__(self, 변수1, 변수2, ...): | | def __init__(self, 변수1, 변수2, ...): |
| 명령 | | 명령 |
− | </syntaxhighlight>객체명=클래스명(변수1, 변수2, ...) 형태로 넣어주어야 한다. | + | </syntaxhighlight>객체명 = 클래스명(변수1, 변수2, ...) 형태로 넣어주어야 한다. |
| |- | | |- |
− | | | + | |소멸자 |
− | | | + | |__del__ |
− | | | + | |인스턴스가 메모리에서 제거될 때 호출된다. |
| | | | | |
| |- | | |- |
56번째 줄: |
64번째 줄: |
| 전체 계좌수, 전체 계정수 등을 파악할 때 사용. 인스턴스들끼리 공유해야 하는 경우. | | 전체 계좌수, 전체 계정수 등을 파악할 때 사용. 인스턴스들끼리 공유해야 하는 경우. |
| |클래스명.변수명 | | |클래스명.변수명 |
| + | (클래스명 대신 인스턴스명도 됨) |
| |- | | |- |
| |인스턴스변수 | | |인스턴스변수 |
65번째 줄: |
74번째 줄: |
| 인스턴스와 객체는 혼용되어 사용된다. | | 인스턴스와 객체는 혼용되어 사용된다. |
| ===객체 지정=== | | ===객체 지정=== |
− | 인스턴스명=클래스명() #인스턴스를 만들어 클래스를 호출하는 형식. | + | 인스턴스명 = 클래스명() #인스턴스를 만들어 클래스를 호출하는 형식. |
| ===함수사용=== | | ===함수사용=== |
| {| class="wikitable" | | {| class="wikitable" |
− | ! | + | !의도 |
− | ! | + | !사용법 |
| + | !설명 |
| |- | | |- |
| + | |메서드 실행 |
| |인스턴스명.메서드명() | | |인스턴스명.메서드명() |
− | | | + | |인스턴스의 메서드를 실행한다. |
| |- | | |- |
| + | |인스턴스별 메서드 실행 |
| |클래스명.메서드명(인스턴스명) | | |클래스명.메서드명(인스턴스명) |
| |다양한 인스턴스에 대해 반복문 등을 실행할 때 좋을 형태다. | | |다양한 인스턴스에 대해 반복문 등을 실행할 때 좋을 형태다. |
| + | |- |
| + | |클래스 함수 실행 |
| + | |클래스명.메서드명() |
| + | |인스턴스를 지정하지 않고 바로 클래스 함수를 실행할 수 있다.(이땐 self.변수 사용 불가.) |
| + | 다만, 인스턴스 지정 없이 바로 쓰려면 메서드에 @classmethod 라는 데코레이션을 달아주어야 한다. |
| |- | | |- |
| | | | | |
| | | | | |
| + | |굳이 지정하고 싶지 않은데 데코레이션 주면 더러워지는 게 싫은 사람은... |
| + | 클래스명(변수1, 변수2...).메서드명() 형태로 실행할 수 있다. |
| |} | | |} |
| =상속= | | =상속= |
− | 직접 메서드를 구현하긴 귀찮고, 그대로 쓰기에도 곤란한 경우, 기능을 상속받아 메서드를 추가하거나 수정해 사용할 수 있다.<syntaxhighlight lang="python"> | + | 직접 메서드를 구현하긴 귀찮고, 그대로 쓰기에도 곤란한 경우, 기능을 상속받아 메서드를 추가하거나 수정해 사용할 수 있다. |
| + | |
| + | 혹은 특정 기능을 구현할 때 클래스의 형태를 제한하기 위해 사용한다.<syntaxhighlight lang="python"> |
| class 클래스명(상속해주는 클래스명): | | class 클래스명(상속해주는 클래스명): |
| 명령 | | 명령 |
88번째 줄: |
109번째 줄: |
| self.직업=직업 | | self.직업=직업 |
| ... | | ... |
− | </syntaxhighlight> | + | </syntaxhighlight>만약 상속하는 클래스와 상속받는 클래스의 이름이 같은 경우, 상속하는 클래스를 import할 때 as를 이용하여 별칭을 써서 구분해야 한다.(클래스명이 달라야 한다.) |
| + | |
| ===오버라이딩=== | | ===오버라이딩=== |
| 클래스에서 상속받은 메서드와 같은 메서드를 정의하면 덮어쓸 수 있다. 물론, 부모의 메서드 기능을 그대로 써야 할 때도 있는데, 이땐 super()를 이용한다.<syntaxhighlight lang="python"> | | 클래스에서 상속받은 메서드와 같은 메서드를 정의하면 덮어쓸 수 있다. 물론, 부모의 메서드 기능을 그대로 써야 할 때도 있는데, 이땐 super()를 이용한다.<syntaxhighlight lang="python"> |
95번째 줄: |
117번째 줄: |
| 추가할 내용. | | 추가할 내용. |
| </syntaxhighlight> | | </syntaxhighlight> |
− | ==지정메서드== | + | |
− | 모든 클래스가 공유하는 메서드이다.
| + | == 추상 클래스 == |
− | {| class="wikitable"
| + | 메서드의 목록, 받아들이는 인수 형태를 제한한 클래스. 특정 틀 안에서 무언가를 정의하게 할 때 쓰인다.<syntaxhighlight lang="python"> |
− | !메서드
| + | class 추상클래스(metaclass=ABCMeta): |
− | !설명
| + | @abstractmethod |
− | |-
| + | def 메서드이름(self, 인수): |
− | |__init__
| + | 코드 |
− | |생성자. 인스턴스가 만들어질 때 작동하는 메서드이다. 일반적으로 인스턴스 변수를 정의하는 데 사용.
| + | </syntaxhighlight>ABC는 Abstract Base Class의 약자이다. |
− | |-
| + | |
− | |__del__
| + | @abstractmethod 아래에 정의된 메서드는 이 클래스를 상속받을 하위 클래스에서 반드시 정의되어야 하고, 받아들이는 인수의 형태도 같아야 한다는 제약이 생긴다. |
− | |소멸자. 인스턴스가 메모리에서 제거될 때 호출된다.
| + | |
− | |}
| |
| =자주 발생하는 에러= | | =자주 발생하는 에러= |
| ===missing 1 required positional argument: 'self'=== | | ===missing 1 required positional argument: 'self'=== |
| + | TypeError: ... missing 1 required positional argument: 'self' |
| 클래스는 함수를 사용하기 전에 인스턴스를 먼저 생성해야 한다.<syntaxhighlight lang="python"> | | 클래스는 함수를 사용하기 전에 인스턴스를 먼저 생성해야 한다.<syntaxhighlight lang="python"> |
| 인스턴스 = 클래스() | | 인스턴스 = 클래스() |
| 인스턴스.메서드() | | 인스턴스.메서드() |
| </syntaxhighlight>위처럼 인스턴스를 만드는 과정이 없으면 생기는 에러이다. | | </syntaxhighlight>위처럼 인스턴스를 만드는 과정이 없으면 생기는 에러이다. |
| + | |
| + | === got multiple values for argument === |
| + | 메서드의 첫 번째 인자가 self가 아닐 때 발생하는 에러. 한 인수에 2개의 데이터가 할당될 때.. |
| [[분류:기초]] | | [[분류:기초]] |