클래스(Class)
객체를 생성하기 위한 툴(설계도)
- class 키워드를 사용하여 클래스를 정의
- 클래스 이름은 보통 PascalCase로 작성
- Python3에서는 object를 명시하지 않아도 자동으로 모든 클래스가 object를 상속받음
class Cat(object): # 명시적으로 object를 상속
pass
class Cat: # python 3의 object 상속
pass
*PascalCase vs. 다른 표기법들
표기법 | 설명 | 예제 |
PascalCase | 각 단어의 첫 글자를 대문자로 표기 | MyClass, UserProfile |
camelCase | 첫 단어는 소문자, 이후 단어는 대문자로 시작 | myClass, userProfile |
snake_case | 모든 단어를 소문자로 표기하고 _로 구분 | my_class, user_profile |
kebab-case | 모든 단어를 소문자로 표기하고 -로 구분 | my-class, user-profile |
클래스 변수와 인스턴스 변수
클래스 변수
클래스 자체에 정의된 변수
- 모든 인스턴스가 공유함
- ClassName.변수명 형태로 접근 가능
- 어떤 객체에서도 동일한 값 유지
class Cat:
legs = 4 # 클래스 변수 (모든 고양이가 공유)
print(Cat.legs) # 4 (클래스를 통해 직접 접근 가능)
- 클래스 변수를 인스턴스에서 접근할 수도 있음
a = Cat()
b = Cat()
print(a.legs) # 4
print(b.legs) # 4
- 클래스 변수를 변경하면 모든 인스턴스에 영향
Cat.legs = 3
print(a.legs) # 3
print(b.legs) # 3
- 인스턴스에서 직접 변경하면, 새로운 인스턴스 변수로 저장됨
a.legs = 2 # a 인스턴스에서만 변경
print(a.legs) # 2 (인스턴스 변수로 재정의)
print(b.legs) # 3 (클래스 변수는 그대로)
인스턴스 변수
객체(인스턴스)마다 개별적으로 저장되는 변수
- self.변수명 형태로 선언하고, __init__생성자에서 정의
- 각 객체(인스턴스)마다 다른 값을 가질 수 있음
class Cat:
def __init__(self, name, age):
self.name = name # 인스턴스 변수
self.age = age # 인스턴스 변수
# 인스턴스 생성
a = Cat("Cookie", 3)
b = Cat("Eve", 1)
print(a.name, a.age) # Cookie 3
print(b.name, b.age) # Eve 1
각 객체마다 name, age값이 다름 → self.name, self.age는 인스턴스 변수이기 때문
클래스 변수 | 인스턴스 변수 | |
정의 위치 | 클래스 내부, __init__바깥 | __init__내부에서 self.변수명으로 정의 |
저장 위치 | 클래스 자체에 저장 | 개별 객체(인스턴스) 내부에 저장 |
공유 여부 | 모든 인스턴스가 공유 | 각 인스턴스마다 고유한 값 |
접근 방법 | ClassName.변수명 또는 self.변수명 | self.변수명 |
변경 시 영향 범위 | 모든 인스턴스에 적용 | 해당 인스턴스에만 적용 |
'Python to AI' 카테고리의 다른 글
혼동행렬을 활용한 분류 성능 지표 (1) | 2025.02.02 |
---|---|
titanic 데이터셋 분석 및 모델 학습 (0) | 2025.01.29 |
Iris 데이터셋과 결정 트리(Decision Tree) 모델 : 평가 방법 비교 및 교차 검증 실습 (0) | 2025.01.24 |
Scikit-Learn과 Estimator (0) | 2025.01.21 |
Perceptron(퍼셉트론) (1) | 2025.01.14 |