목차
1.메타프로그래밍(10/9)(coming soon)
시작하기전.......
메타프로그래밍이란?
파이썬에서 메타프로그래밍이란 코드를 작성하는 중에,
코드 자체를 수정하거나, 추가할 수 있는 기능을 말합니다
1. getattr와 setattr
getattr와 setattr은 클래스 객채의 속성에 접근(getattr)하여 수정(setattr)하는 함수입니다! |
기본 구조: getattr : getattr(object, name[, default]) object -> 속성을 가져올 객체의 이름입니다! name -> 속성의 이름을 문자로 넣습니다! default -> 만약 속성이 없을 경우, 에러가 나는데, 속성의 기본값을 대체합니다! setattr : setattr(object, name, value) obejct -> 수정하려는 객체의 이름입니다! name -> 수정하려는 속성의 이름입니다 value -> 새롭게 지정할 값을 넣는 곳입니다! |
그럼 예시를 함 만들어 볼까요?
class body:
def __init__(self, body1, body2):
self.body1 = body1
self.body2 = body2
def movement(self):
return f'{self.body1}와 {self.body2}가 움직여요!'
my_body = body('팔', '다리')
setattr(my_body, 'body1', '손가락')
print(getattr(my_body, 'body1'))
setattr(my_body, 'body2', '발가락')
print(getattr(my_body, 'body2'))
여기서, body라는 클래스를 만들었고, my_body라는 객체를 생성했습니다.
자, 여기서 제가 말한 구조를 대입하면,
setattr(my_body, 'body1', '손가락')
object -> my_body(객체)
name -> 'body1' (속성의 이름 -> 인스턴트 변수)
value -> '손가락' (새롭게 지정할 값)
즉, 처음 객체에 '팔'을 넣었다면, setattr을 통해 값을 '손가락'으로 변경했습니다!
그리고 밑에 body2도 똑같은 방식으로 '발가락'으로 변경했습니다!
그렇게해서 출력을 하면,
손가락
발가락
으로 출력되는 것을 볼 수 있습니다!.
설정할 수 있으면, 지우거나 확인할 수 있는 함수도 분명히 있겠죠?
hasattr와 delattr
hasattr -> 특정 개체가 특정 속성을 가지고 있는지 확인합니다. |
기본 구조: hasattr(object, name) object: 속성을 확인할 객체 name: 확인할 속성 이름 (문자열) |
예시:
class body:
def __init__(self, body1):
self.body1 = body1
def movement(self):
return f'{self.body1}가 움직여요!'
my_body = body('팔')
print(hasattr(my_body, 'body1'))
이렇게, hasattr을 넣어, 'body1'라는 속성이 있는지 찾습니다.
이미 body1라는 속성이 존재하기에 True값이 출력됩니다.
delattr -> 특정 객체의 속성을 삭제하는 데 사용되는 함수입니다. |
기본 구조: delattr(object, name) object: 속성을 삭제할 객체 name: 삭제할 속성 이름 (문자열) |
예시:
class body:
def __init__(self, body1):
self.body1 = body1
def movement(self):
return f'{self.body1}가 움직여요!'
my_body = body('팔')
delattr(my_body, 'body1')
print(hasattr(my_body, 'body1'))
이렇게 delattr을 사용하여, body1이라는 속성을 제거했고, 실제로 hasattr을 사용해 찾을려고 하면, False가 출력이 됩니다.