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 = ... 처럼 인스턴스에 저장되는 속성. 인스턴스 마다 독립

← python 3.14으로