728x90
재귀함수(self) : 자기 자신을 설정하는 함수
재귀함수의 조건
1. 반복문으로 구현이 가능해야 함 (효율적 변경을 위해 반복문 >> 재귀함수로 바꾸는 것)
2. 종료 조건을 설정 : 반드시 끝나는 지점이 있어야 함
- 종료 조건이 없을 시 복잡도가 한 없이 증가
# 예시 1
def recursional(n):
if n >=5:
print(n)
recursion(n+1)
recursional(1) # 1 2 3 4
# 예시 2
def recursion(n):
if n <=0:
return 0
return n + recursion(n-1)
print(recursion(4)) # 10
예시에서는 if문을 사용해서 종료 시점을 정해주었다.
# 팩토리얼 계산법
def factorial(a):
if a == 0:
return 1
return a * factorial(a-1)
print(factorial(16))
만약 종료 시점을 정해주지 않는다면, 아래와 같이 야무진 에러코드가 나타날 것이다.
RecursionError: maximum recursion depth exceeded while calling a Python object
method overriding : 부모 클래스에서 정의한 method를 자녀 클래스에서 재정의하는 것
# method overriding
class Animal:
def __init__(self) -> None:
pass
def speak(self):
print("동물 소리")
class dog(Animal):
def speak(self):
print("개소리")
class cat(Animal):
def speak(self):
print("야옹")
Dog = dog("강아지")
Cat = cat("고냥이")
끄느트리 블로그에서 인용 좀... 하자면
# 모델 class에서의 오버라이딩
from django.db import models
class MyModel(models.Model):
name = models.CharField(max_length=100)
# save 메서드를 오버라이딩하여 저장하기 전 특정 작업 수행
def save(self, *args, **kwargs):
self.name = self.name.upper() # name 속성의 값을 대문자로 변환
super(MyModel, self).save(*args, **kwargs) # 저장
Model에서 name 값만 가져와서 save 함수를 이식하는 오버라이딩
from django.db import forms
class MyForm(forms.Form):
name = forms.CharField(max_length=100)
# clean_name 메서드를 오버라이딩하여 입력값을 검증하거나 처리하는 등의 작업 수행
def clean_name(self):
name = self.clean_data['name']
return name.capitalize() # name 필드 값의 첫 글자를 대문자로 변환
Form에서 name 값만 가져와서 clean_name 함수를 이식하는 오버라이딩
추상 클래스 : 부모 클래스에서 정의하지 않고, 자녀 클래스에서 정의하게 하는 클래스
부모 클래스에서는 그냥 우리 자식클래스들은 다 이런 이름의 함수를 가지고 있다~라고 추상적 설명만 하고
실제 내용은 자식 클래스들이 각각 따로 갖고 있을 때 추상 클래스를 사용하는 것으로 보인다.
# 추상 클래스
import abc
class Animal(abc.ABC)
@abc.abstractmethod # 얘가 핵심 명령어.
def tear(self):
pass # 함수만 만들고 자녀 클래스에서 알아서 정의하라고 패스
'언어 > Python' 카테고리의 다른 글
pip/conda 의미, 가상환경의 정확한 의미 (0) | 2023.06.08 |
---|---|
파이썬 포멧팅 %, {}, f-string (0) | 2023.05.03 |
파이썬 심화과정 week 1 (5) | 2023.04.12 |
map, filter, lambda 식 연습 (2) | 2023.03.23 |
requests 에러 표시, 함수 return type (0) | 2023.03.21 |