본문 바로가기
Python

클래스와 인스턴스

by Salgoo26 2021. 8. 30.

클래스와 인스턴스

인스턴스 변수

  • 인스턴스의 속성(attribute)
  • 각 인스턴스들의 고유한 변수
    • 메서드에서 self.<name> 으로 정의
    • 인스턴스 생성 이후 <instance>.<name> 으로 접근 및 값 할당 가능

클래스 변수

  • 클래스의 속성(attibute)
  • 모든 인스턴스가 공유함
  • 클래스 선언 내부에서 정의
  • <classname>.<name> 으로 접근 및 할당
class Circle:
    pi = 3.14

c1 = Circle()

print(Circle.pi)
print(c1.pi)

=> 3.14
=> 3.14

인스턴스와 클래스 간의 이름 공간(namespace)

  • 클래스를 정의하면, 클래스와 해당하는 이름공간 생성
  • 인스턴스를 만들면, 인스턴스 객체가 생성되고 이름 공간 생성
  • 인스턴스에서 특정 속성에 접근하면, 인스턴스-클래스 순으로 탐색
  • 클래스에서 인스턴스 변수에 접근할 수는 없음
class Person:
    name = 'None'

# Person 클래스의 인스턴스를 생성하고 name 확인
p1 = Person()
print(p1.name)
=> 'None'

# p1의 name 속성을 지정하과 확인
p1.name = 'sun'
print(p1.name)
print(Person.name)
=> 'sun'
=> 'None'

메서드의 종류

  • 인스턴스 메서드
  • 클래스 메서드
  • 스태틱 메서드

인스턴스 메서드

  • 인스턴스가 사용할 메서드
  • 인스턴스가 가진 변수, 속성을 조작하기 위함
  • 클래스 내부에 정의되는 메서드의 기본
  • 호출 시, 첫 번째 인자로 인스턴스 자기자신(self)이 전달됨

클래스 메서드

  • 클래스가 사용할 메서드
  • 클래스가 가진 변수, 속성을 조작하기 위함
  • @classmethod 데코레이터를 사용하여 정의
  • 호출 시, 첫 번째 인자로 클래스(cls)가 전달됨
# 정의
class MyClass:
     ...

    @classmethod
    def class_method(cls, ar1, ...):
        ...

# 호출 시
MyClass.class_method(..)

스태틱 메서드

  • 클래스가 사용할 메서드
  • @staticmethod 데코레이터를 사용하여 정의
  • 호출 시, self나 cls 인자가 전달되지 않음 (즉, 클래스 정보에 접근이나 수정 불가)
# 정의
class MyClass:
     ...

    @staticmethod
    def class_method(ar1, ...):
        ...

# 호출 시
MyClass.static_method(..)

메서드 정리 (주의사항)

  • 클래스에 의해 생성된 인스턴스는 스태틱 메서드를 호출할 수 있음
  • 마찬가지로, 인스턴스는 클래스 메서드를 호출할 수 있음
  • 하지만, 일반적으로 인스턴스에서 스태틱 메서드와 클래스 메서드는 되도록 호출하지 않아야 한다.
  • 클래스는 클래스 속성 접근 여부에 따라 클래스 메서드나 정적 메서드로 정의

'Python' 카테고리의 다른 글

가상환경  (0) 2021.09.01
상속  (0) 2021.08.30
객체지향 프로그래밍  (0) 2021.08.30
객체  (0) 2021.08.30
데이터 구조  (0) 2021.08.30

댓글