개발하는 자몽

[Python] 속성(Attribute) 본문

Python

[Python] 속성(Attribute)

jaamong 2023. 9. 14. 16:27
 

Python 강좌 : 제 37강 - 속성(Attribute)

속성(Attribute)

076923.github.io

위 블로그 글이 매우 잘 정리되어 있으니 위 글을 읽는 것을 추천합니다. (읽고 그냥 정리했습니다)

 

 

 

자바에서는 필드라고 부르는 것들! 파이썬에서는 속성(Attribute)이라고 부르는 것 같다. 헷갈리는 것들이 많아서 위 블로그 글을 읽고 정리했다.

 

속성(Attribute)은 클래스 내부에 포함된 메서드변수를 의미하며, 크게 클래스 속성 인스턴스 속성으로 나뉜다.

class Person:
    클래스_속성 = 값  # 클래스 속성

    def __init__(self, name):
        # 속성은 메서드에서 "self"로 접근하거나 "인스턴스.속성" 형식으로 클래스 밖에서 접근 가능
        self.인스턴스_속성 = 값  # 인스턴스 속성
        self.name = name


jaamong = Person("자몽", 100, "지구")
jaamong.name  # 인스턴스.속성

클래스 속성

  • 클래스 내부의 메서드 단계와 동일한 영역에 위치한 변수
  • self를 사용하지 않고 정의 (self : 자기 자신을 의미함. 인스턴스를 지칭 (Java의 this와 비슷하다)
  • 클래스 속성에 접근할 경우, 모든 클래스에 동일하게 영향을 미침 (self를 사용하지 않고 정의하므로)
  • 인스턴스가 생성될 때 초기화되지 않으므로, 클래스명.클래스_속성 으로 참조 가능 (Java의 public static 변수처럼 이해)

 

인스턴스 속성

  • self를 통해 할당된 인스턴스만의 변수
  • self 정의 → 인스턴스 내에서만 영향을 미침
  • 주로, __init__이나 메서드 내부에서 할당된 변수 
  • 인스턴스를 초기화할 때 생성됨 → 인스턴스명.인스턴스_속성으로 참조 가능

 

 

class Jaamong:
    class_attr = 0

    def __init__(self):
        self.instance_attr = 0

    def set_class_attr(self):
        Jaamong.class_attr = 10

    def set_instance_attr(self):
        self.class_attr = 20


instance1 = Jaamong()
instance2 = Jaamong()

# 클래스 속성 변경(Jaamong 클래스에 대한 동일한 속성이 일괄 변경됨)
instance1.set_class_attr()
print(instance1.class_attr, instance2.class_attr)  # 10 10

# 인스턴스 속성 변경 (instance1에 대한 속성만 변경됨)
instance1.set_instance_attr()
print(instance1.class_attr, instance2.class_attr)  # 20 10

 

class_attr은 클래스 속성이므로 instance1을 통해 class_attr을 변경하면 instance2를 통해 접근했을 때도 변경된 상태로 출력된 것을 알 수 있다(모든 클래스에 영향을 미침)

이 때 클래스명.클래스_속성으로 접근하지 않고 self로 접근하면 인스턴스 속성처럼 인스턴스 내에서만 영향을 미치게 된다.

 

Comments