Python은 객체 지향 프로그래밍(OOP) 언어로서 객체를 중심으로 설계된 언어입니다. 클래스는 객체가 생성되는 기반이 되는 청사진(설계도) 역할을 하며, 각 클래스는 여러 개의 속성(attribute)을 가질 수 있습니다. 특히 Python에서는 함수조차 하나의 속성으로 포함될 수 있다는 점이 큰 특징입니다.
클래스 속성에 접근하기
클래스의 속성을 확인하거나 조작하려면 Python이 기본 제공하는 내장 함수를 활용하면 매우 편리합니다.
- getattr() – 클래스의 속성 값을 읽어올 때 사용하는 내장 함수입니다.
- hasattr() – 클래스에 특정 속성이 존재하는지 여부를 검증하는 내장 함수입니다.
- setattr() – 클래스에 새로운 속성을 추가하거나 기존 속성값을 변경할 때 사용하는 내장 함수입니다.
아래 예제는 위 세 가지 함수를 활용하여 Python 클래스의 속성에 접근하는 과정을 보여줍니다.
예제
class StateInfo:
StateName = 'Telangana'
population = '3.5 crore'
def func1(self):
print('Hello from my function')
print(getattr(StateInfo, 'StateName'))
# 객체에 해당 속성이 존재하면 True 반환
print(hasattr(StateInfo, 'population'))
setattr(StateInfo, 'ForestCover', 39)
print(getattr(StateInfo, 'ForestCover'))
print(hasattr(StateInfo, 'func1'))
실행 결과
Telangana
True
39
True
참고: getattr()는 세 번째 인자로 기본값을 받을 수 있습니다. 예를 들어 getattr(StateInfo, 'Capital', 'N/A')처럼 작성하면 해당 속성이 존재하지 않을 때 AttributeError 대신 'N/A'가 반환되므로, 안전하게 속성에 접근할 수 있습니다.
클래스 메서드에 접근하기
클래스의 메서드에 접근하려면 먼저 클래스를 인스턴스화하여 객체를 생성해야 합니다. 이후에는 아래 예제처럼 인스턴스 메서드 형태로 메서드를 호출할 수 있습니다. self 매개변수 덕분에 인스턴스 메서드는 같은 객체의 속성이나 다른 메서드에 자유롭게 접근할 수 있습니다.
예제
class StateInfo:
StateName = 'Telangana'
population = '3.5 crore'
def func1(self):
print('Hello from my function')
print(getattr(StateInfo, 'StateName'))
# 객체에 해당 속성이 존재하면 True 반환
print(hasattr(StateInfo, 'population'))
setattr(StateInfo, 'ForestCover', 39)
print(getattr(StateInfo, 'ForestCover'))
print(hasattr(StateInfo, 'func1'))
obj = StateInfo()
obj.func1()
실행 결과
Telangana
True
39
True
Hello from my function
다른 클래스에서 메서드 호출하기
한 클래스에서 다른 클래스의 메서드를 호출하려면, 호출 대상 클래스의 인스턴스를 호출하는 클래스 쪽으로 전달해야 합니다. 아래 예제는 그 구현 방법을 단계별로 보여줍니다.
예제
class ClassOne:
def m_class1(self):
print('Method in class 1')
# 호출을 담당하는 클래스 정의
class ClassTwo(object):
def __init__(self, c1):
self.c1 = c1
# 실제 호출을 수행하는 메서드
def m_class2(self):
object_inst = self.c1()
object_inst.m_class1()
# ClassOne을 인자로 전달하여 ClassTwo 객체 생성
obj = ClassTwo(ClassOne)
obj.m_class2()
실행 결과
Method in class 1
정리
Python은 getattr(), hasattr(), setattr() 같은 내장 함수를 통해 클래스 속성을 유연하게 조회·검증·설정할 수 있습니다. 또한 클래스를 인스턴스화하여 메서드를 호출하거나, 다른 클래스에 인스턴스를 전달하는 방식으로 클래스 간 상호작용도 손쉽게 구현할 수 있습니다. 이러한 기법들은 객체 지향 코드를 더 깔끔하고 안전하게 작성하는 데 큰 도움이 됩니다.