https://docs.python.org/3/tutorial/classes.html#a-first-look-at-classes
https://docs.python.org/3/tutorial/classes.html#class-definition-syntax
class 블록은 실행 시점에 동작한다.
클래스 본문이 실행되면 “클래스 전용 네임스페이스”가 만들어져 로컬 스코프로 쓰인다
- 본문의 대입, 함수 정의가 모두 여기에 쌓인다.
https://docs.python.org/3/tutorial/classes.html#class-objects
속성 참조: ClassName.attr 형태로 클래스 네임스페이스에 있던 이름을 사용가능
인스턴스화: 클래스를 함수처럼 호출 x = Myclass()
__init__: 인스턴스 생성 직후 자동 호출되어 초기 상태 설정 (클래스 호출 시 전달 인자가 __init__에 전달됨)
클래스 속성(클래스 네임스페이스)
class class_attribute_test():
__x=1
x=2 #여기서 x, __x는 클래스 속성인스턴스 속성(해당 객체의 네임스페이스)
class instance_attr_test():
def __init__(self):
self.x=1 # 여기서 x는 인스턴스 속성으로 해당 객체의 네임스페이스https://docs.python.org/3/tutorial/classes.html#instance-objects
클래스의 인스턴스 객체는 속성 접근을 지원
- 데이터 속성:
- 인스턴스 데이터 필드. 선언 없이
x.foo = ...처럼 대입하면 즉시 생김 del x.foo로 제거할 수 있음
- 인스턴스 데이터 필드. 선언 없이
- 메서드:
- 클래스에 정의된 함수 속성이 인스턴스에서 메서드로 노출된 것
x.f처럼 접근하면self인자가 내부에 미리 결합되고, 호출 시 자동으로 그 인스턴스를 첫 인자로 넘김
class C:
def f(self,x):
return self.v + x
instance_c = C()
instance_c.v = 10
#클래스 함수 객체로 호출 방법
C.f(instance_c, 5)
# 인스턴스를 통한 방법 - 인스턴스를 통하면 self가 자동 결합되어 첫 인자를 생략 호출 가능
instance_c.f(5)https://docs.python.org/3/tutorial/classes.html#method-objects
인스턴스 속성 조회 시 함수가 나오면
파이썬이 (인스턴스, 함수)를 묶은 메서드 객체를 만들어 주고,
호출 순간 인스턴스를 인자 목록 앞에 붙여 실제 함수 객체를 실행하는 방식입니다.
https://docs.python.org/3/tutorial/classes.html#class-and-instance-variables
클래스 변수 vs 인스턴스 변수
→ 공유할 값 (상수형, 설정 값)은 클래스 변수로 설정
→ 각 인스턴스마다 달라야 하거나 가변 상태는 인스턴스 변수로 설정
클래스 변수
class블록 안에서 바로 할당한 속성.- 모든 인스턴스가 공유
- 인스턴스에서 같은 이름을 새로 만들지 않는 한 공통 값으로 보인다.
인스턴스 변수
self.x = ...처럼 인스턴스에 저장되는 속성. 인스턴스 마다 독립