디스코드봇 5. 코드의 원리 파악하기 (2) 데코레이터

2020. 12. 20. 21:12· 프로젝트/설명
import discord

client = discord.Client()

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('$hello'):
        await message.channel.send('hello!')

client.run('your token here')

샘플봇 어서오고...

async def(비동기함수 선언문)위에 쓰여진 @client.event 보이시나요?

저걸 데코레이터라 합니다.

왜 쓸까요?

1. 파이썬에서 함수의 조건

파이썬에서 함수 (def)는 1급 객체(first citizen)입니다.

1급 객체의 특성

일반적인 함수는 입력값으로 변수를 받죠? 그렇다면 함수를 집어넣어 다른 함수를 출력하는 함수는 어떨까요?

파이썬에서 데코레이터는 그 역할을 수행합니다.

2. 데코레이터 사용법

def deco(func):
    def decorated():
        print('a')
        func()
        print('b')
    return decorated

@deco
def main1():
    print('메인 1 함수입니다.')

@deco
def main2():
    print('메인 2 함수입니다.')

main1()
main2()

deco(func)라는 함수를 받는 함수를 하나 설정해주었습니다.

함수 위에 @deco만 붙이면 그 함수의 내용물은 decorated() 안의 func()에 들어가고, 실제로는 decorated()로 치환되어 출력됩니다. 쉽게 말해 합성함수죠. 결과를 한 번 볼까요?

a
메인 1 함수입니다.
b
a
메인 2 함수입니다.
b

다시 샘플봇으로 돌아가봅시다.

3. 샘플봇 해석하기

import discord

client = discord.Client()

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('$hello'):
        await message.channel.send('hello!')

client.run('your token here')

discord라는 모듈 안에는 Client()라는 함수가 있습니다. 우리는 이를 client로 치환할거구요.

함수는 총 2개입니다. 모두 비동기 함수로서, client.run('token')에 의해 동작하는 것을 알 수 있습니다.

client.run 함수는 discord(모듈).Client(클래스).run(함수)로서 서버와 연결하는 API와 위의 비동기 함수를 실행하는 두 가지 역할을 수행합니다.

client.event에는 다양한 종류가 있는데요, 클라이언트(사용자)가 어떤 이벤트를 발생시키면 client.event에서 그게 on_ready() 이벤트인지, on_message() 이벤트인지 판단합니다.

만약 비동기 함수 목록중 하나가 이벤트와 일치한다면 함수를 실행시킵니다. 그러나 @client.event가 데코레이터기 때문에, 함수를 다른 함수에 집어넣고 치환한 결과물을 실행시키겠죠? 데코레이터가 받는 함수는 discord 모듈 내에 존재할 것이구요.

 

client.run 함수에 Client가 클래스라고 했습니다. 다음시간에는 이 클래스가 어떻게 동작하는지 살펴봅니다. 어떻게 동작하는지 알게 되면 자연스레 API도 읽을 수 있을겁니다.

 

태그된 시리즈 바로가기 ↓↓

https://ghlabnote.tistory.com/tag/디스코드봇

 

연구노트

 

ghlabnote.tistory.com

https://ghlabnote.tistory.com/tag/파이썬%20문법

 

연구노트

 

ghlabnote.tistory.com

 

저작자표시 비영리 동일조건

'프로젝트 > 설명' 카테고리의 다른 글

카페24 쇼핑몰 1. 시작하기  (0) 2021.10.22
디스코드봇 6. 코드의 원리 파악하기 (3) 객체 지향과 공식문서 활용법  (0) 2020.12.20
CSS 핵심 내용 정리  (0) 2020.12.17
디스코드봇 4. 코드의 원리 파악하기 (1) 비동기 처리  (0) 2020.12.01
디스코드봇 3. 파이썬 가상환경 구축, 라이브러리 추가, 실행  (0) 2020.11.28
  1. 1. 파이썬에서 함수의 조건
  2. 2. 데코레이터 사용법
  3. 3. 샘플봇 해석하기
'프로젝트/설명' 카테고리의 다른 글
  • 카페24 쇼핑몰 1. 시작하기
  • 디스코드봇 6. 코드의 원리 파악하기 (3) 객체 지향과 공식문서 활용법
  • CSS 핵심 내용 정리
  • 디스코드봇 4. 코드의 원리 파악하기 (1) 비동기 처리
ghyeo.ng
ghyeo.ng
Extra Ordinaries
ghyeo.ng
연구노트
ghyeo.ng
전체
오늘
어제
  • 분류 전체보기 (41)
    • 블로그 (6)
      • 글 (5)
      • 리뷰 (1)
      • 일상 (0)
      • 일반 (0)
    • 프로젝트 (35)
      • 아카이브 (21)
      • 설명 (12)
      • 소개 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 라즈베리파이
  • 회고
  • 외주아님
  • 디스코드봇
  • UI 디자인 기초
  • 생활코딩 WEB
  • 리눅스
  • 카페24 쇼핑몰 개발
  • 파이썬 문법

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
ghyeo.ng
디스코드봇 5. 코드의 원리 파악하기 (2) 데코레이터
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.