파이썬 - 반사
안녕하세요, 미래의 파이썬 마법사 여러분! 오늘, 우리는 파이썬 반사의 마법의 세계로 흥미진진한 여정을 떠날 거예요. 반사라는 단어를 들어본 적이 없다고 해도 걱정 마세요. 이 튜토리얼이 끝날 때까지 여러분은 프로처럼 반사를 할 준비가 될 거예요! 그럼, 여러분의 마법봉을 준비해요 (저는 키보드라고 말이죠), 이제 시작해볼까요!
반사란 무엇인가요?
시작하기 전에, 반사란 무엇인지 이해해볼까요. 프로그래밍에서 반사는 프로그램이 자신의 구조와 동작을 실행 시간 중에 검사하고, 자기省察하고, 수정할 수 있는 거울과 같은 것입니다. 이는 여러분의 코드가 자신을 볼 수 있는 능력을 주는 것과 같아요. "제가 무엇으로 만들어졌니?"라고 말할 수 있죠. 정말 멋질 텐데요?
type() 함수
type()
함수부터 시작해볼게요. 이는 객체에게 "너는 무엇이니?"라고 물어보는 것과 같아요.
# 예제 1: type() 사용
x = 5
y = "Hello"
z = [1, 2, 3]
print(type(x)) # 출력: <class 'int'>
print(type(y)) # 출력: <class 'str'>
print(type(z)) # 출력: <class 'list'>
이 예제에서, 우리는 다른 변수들에게 무엇인지 묻고 있어요. type()
함수는 x
가 정수, y
가 문자열, z
가 리스트라고 알려줍니다. 변수들과 대화를 하고 있는 것과 같아요!
isinstance() 함수
다음은 isinstance()
함수예요. 이 함수는 "너는 이 가족의 일부니?"라고 묻는 것과 같아요.
# 예제 2: isinstance() 사용
x = 5
y = "Hello"
print(isinstance(x, int)) # 출력: True
print(isinstance(y, str)) # 출력: True
print(isinstance(x, str)) # 출력: False
여기서, 우리는 x
가 int
의 인스턴스인지 (그렇다), y
가 str
의 인스턴스인지 (그렇다), x
가 str
의 인스턴스인지 (그렇지 않다)를 확인하고 있어요. "너는 이 클럽의 회원이니?"라고 물어보는 것과 같아요!
issubclass() 함수
그 다음은 issubclass()
함수예요. 이는 "너는 이 가족과 관련이 있니?"라고 묻는 것과 같아요.
# 예제 3: issubclass() 사용
class Animal:
pass
class Dog(Animal):
pass
print(issubclass(Dog, Animal)) # 출력: True
print(issubclass(Animal, Dog)) # 출력: False
이 예제에서, 우리는 Dog
가 Animal
의 서브클래스인지 (그렇다), Animal
가 Dog
의 서브클래스인지 (그렇지 않다)를 확인하고 있어요. "포메라니안은 강아지의 일종이니?"와 "모든 강아지는 포메라니안이니?"라고 물어보는 것과 같아요!
callable() 함수
이제 callable()
함수에 대해 이야기해볼게요. 이 함수는 객체가 함수처럼 호출될 수 있는지 확인합니다.
# 예제 4: callable() 사용
def greet():
print("Hello!")
x = 5
print(callable(greet)) # 출력: True
print(callable(x)) # 출력: False
여기서, 우리는 greet
(함수입니다)가 호출 가능한지, x
(그저 숫자일 뿐)가 호출 가능한지를 확인하고 있어요. "너를 함수로 사용할 수 있니?"라고 묻는 것과 같아요!
getattr() 함수
getattr()
는 객체에게 그의 어트리뷰트를 물어보는 고양의 방법과 같아요.
# 예제 5: getattr() 사용
class Person:
name = "Alice"
age = 30
p = Person()
print(getattr(p, "name")) # 출력: Alice
print(getattr(p, "job", "Unemployed")) # 출력: Unemployed
이 예제에서, 우리는 우리의 Person
객체에게 name
어트리뷰트를 물어보고 있어요. 그리고 job
어트리뷰트는 없어서 기본값으로 "Unemployed"를 제공합니다.
setattr() 함수
setattr()
는 객체에게 새로운 어트리뷰트를 주거나 기존 어트리뷰트를 변경하는 것과 같아요.
# 예제 6: setattr() 사용
class Car:
color = "red"
my_car = Car()
print(my_car.color) # 출력: red
setattr(my_car, "color", "blue")
print(my_car.color) # 출력: blue
setattr(my_car, "brand", "Toyota")
print(my_car.brand) # 출력: Toyota
여기서, 우리는 우리의 차의 color
을 빨간색에서 파란색으로 변경하고, 새로운 brand
어트리뷰트를 주고 있어요.
hasattr() 함수
hasattr()
는 객체에게 "이 어트리뷰트를 가지고 있니?"라고 묻는 것과 같아요.
# 예제 7: hasattr() 사용
class Book:
title = "Python for Beginners"
pages = 200
my_book = Book()
print(hasattr(my_book, "title")) # 출력: True
print(hasattr(my_book, "author")) # 출력: False
이 예제에서, 우리는 우리의 Book
객체가 title
어트리뷰트를 가지고 있는지 (그렇다)와 author
어트리뷰트를 가지고 있는지 (그렇지 않다)를 확인하고 있어요.
dir() 함수
마지막으로 dir()
함수를 살펴보죠. 이 함수는 객체에게 "너는 무엇을 할 수 있니?"라고 묻는 것과 같아요.
# 예제 8: dir() 사용
class Dog:
def __init__(self, name):
self.name = name
def bark(self):
print("Woof!")
my_dog = Dog("Buddy")
print(dir(my_dog))
이 코드는 우리의 Dog
객체의 모든 어트리뷰트와 메서드를 포함한 목록을 출력합니다. name
과 bark
뿐만 아니라 모든 객체가 가지고 있는 내장 어트리뷰트들도 포함됩니다.
반사 함수 요약
여기서는 우리가 다룬 모든 반사 함수의 요약을 보여드릴게요:
함수 | 목적 |
---|---|
type() | 객체의 타입을 반환합니다 |
isinstance() | 객체가 지정된 클래스의 인스턴스인지 확인합니다 |
issubclass() | 클래스가 다른 클래스의 서브클래스인지 확인합니다 |
callable() | 객체가 함수처럼 호출 가능한지 확인합니다 |
getattr() | 객체의 어트리뷰트의 값을 가져옵니다 |
setattr() | 객체의 어트리뷰트의 값을 설정합니다 |
hasattr() | 객체가 특정 어트리뷰트를 가지고 있는지 확인합니다 |
dir() | 객체의 어트리뷰트와 메서드의 목록을 반환합니다 |
그리고 그렇게 끝납니다, 여러분! 여러분은 파이썬 반사의 세계로 첫 걸음을 내딛었어요. 이 도구들은 여러분의 코드와 대화를 할 수 있는 것과 같아요. 여러분의 프로그램들이 자신을 검사하고, 발견한 것을 기반으로 결정을 내릴 수 있게 해줍니다. 이는 여러분의 코드를 더 유연하고 동적으로 만드는 강력한 기능입니다.
파이썬의 여정을 계속하면서, 여러분은 반사를 사용하여 더 더 스마트하고 유연한 프로그램을 만드는 더 많은 방법을 찾을 거예요. 연습을 계속하고, 탐구하고, 가장 중요한 것은 파이썬을 즐기세요!
Credits: Image by storyset