바뀜

1,991 바이트 추가됨 ,  2022년 9월 29일 (목) 23:02
편집 요약 없음
19번째 줄: 19번째 줄:  
===함수. 메서드.===
 
===함수. 메서드.===
 
클래스 내부에 정의된 함수는 메서드라는 이름으로 구분한다.
 
클래스 내부에 정의된 함수는 메서드라는 이름으로 구분한다.
 +
 +
메서드를 정의할 땐 가장 처음에 self라는 인수를 받아야 한다. 메서드의 첫 번째 인자로 인스턴스가 전달되기 때문에 self를 지정해두지 않으면 한 변수에 2개의 데이터가 담겨 에러가 발생한다.
    
== 지정메서드 ==
 
== 지정메서드 ==
75번째 줄: 77번째 줄:  
===함수사용===
 
===함수사용===
 
{| class="wikitable"
 
{| class="wikitable"
!
+
!의도
!
+
!사용법
 +
!설명
 
|-
 
|-
 +
|메서드 실행
 
|인스턴스명.메서드명()
 
|인스턴스명.메서드명()
|
+
|인스턴스의 메서드를 실행한다.
 
|-
 
|-
 +
|인스턴스별 메서드 실행
 
|클래스명.메서드명(인스턴스명)
 
|클래스명.메서드명(인스턴스명)
 
|다양한 인스턴스에 대해 반복문 등을 실행할 때 좋을 형태다.
 
|다양한 인스턴스에 대해 반복문 등을 실행할 때 좋을 형태다.
 +
|-
 +
|클래스 함수 실행
 +
|클래스명.메서드명()
 +
|인스턴스를 지정하지 않고 바로 클래스 함수를 실행할 수 있다.(이땐 self.변수 사용 불가.)
 +
다만, 인스턴스 지정 없이 바로 쓰려면 메서드에 @classmethod 라는 데코레이션을 달아주어야 한다.
 
|-
 
|-
 
|
 
|
 
|
 
|
 +
|굳이 지정하고 싶지 않은데 데코레이션 주면 더러워지는 게 싫은 사람은...
 +
클래스명(변수1, 변수2...).메서드명() 형태로 실행할 수 있다.
 
|}
 
|}
 
=상속=
 
=상속=
직접 메서드를 구현하긴 귀찮고, 그대로 쓰기에도 곤란한 경우, 기능을 상속받아 메서드를 추가하거나 수정해 사용할 수 있다.<syntaxhighlight lang="python">
+
직접 메서드를 구현하긴 귀찮고, 그대로 쓰기에도 곤란한 경우, 기능을 상속받아 메서드를 추가하거나 수정해 사용할 수 있다.
 +
 
 +
혹은 특정 기능을 구현할 때 클래스의 형태를 제한하기 위해 사용한다.<syntaxhighlight lang="python">
 
class 클래스명(상속해주는 클래스명):
 
class 클래스명(상속해주는 클래스명):
 
     명령
 
     명령
95번째 줄: 109번째 줄:  
         self.직업=직업
 
         self.직업=직업
 
         ...
 
         ...
</syntaxhighlight>
+
</syntaxhighlight>만약 상속하는 클래스와 상속받는 클래스의 이름이 같은 경우, 상속하는 클래스를 import할 때 as를 이용하여 별칭을 써서 구분해야 한다.(클래스명이 달라야 한다.)
 +
 
 
===오버라이딩===
 
===오버라이딩===
 
클래스에서 상속받은 메서드와 같은 메서드를 정의하면 덮어쓸 수 있다. 물론, 부모의 메서드 기능을 그대로 써야 할 때도 있는데, 이땐 super()를 이용한다.<syntaxhighlight lang="python">
 
클래스에서 상속받은 메서드와 같은 메서드를 정의하면 덮어쓸 수 있다. 물론, 부모의 메서드 기능을 그대로 써야 할 때도 있는데, 이땐 super()를 이용한다.<syntaxhighlight lang="python">
102번째 줄: 117번째 줄:  
     추가할 내용.
 
     추가할 내용.
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
== 추상 클래스 ==
 +
메서드의 목록, 받아들이는 인수 형태를 제한한 클래스. 특정 틀 안에서 무언가를 정의하게 할 때 쓰인다.<syntaxhighlight lang="python">
 +
class 추상클래스(metaclass=ABCMeta):
 +
    @abstractmethod
 +
    def 메서드이름(self, 인수):
 +
        코드
 +
</syntaxhighlight>ABC는 Abstract Base Class의 약자이다.
 +
 +
@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개의 데이터가 할당될 때..
 
[[분류:기초]]
 
[[분류:기초]]