Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬에서 점(.) 연산자로 클래스 속성에 접근하는 방법

클래스 속성과 인스턴스 속성의 차이

클래스 속성(class attribute)은 클래스의 개별 인스턴스가 아니라 클래스 자체에 속하는 속성입니다. 반면 인스턴스 속성(instance attribute)은 각 객체마다 독립적으로 생성되고 유지되는 속성입니다.

아래 코드에서 class_var는 클래스 속성이고, i_var는 인스턴스 속성입니다. 해당 클래스의 모든 인스턴스는 class_var에 접근할 수 있으며, 클래스 자체의 속성으로도 접근이 가능합니다.

예제 코드

class MyClass(object):
    class_var = 2

    def __init__(self, i_var):
        self.i_var = i_var

foo = MyClass(3)
baz = MyClass(4)
print(foo.class_var, foo.i_var)
print(baz.class_var, baz.i_var)

실행 결과

위 코드를 실행하면 다음과 같은 출력을 얻습니다.

(2, 3)
(2, 4)

동작 원리

foobaz 두 객체 모두 class_var의 값인 2를 공유하는 것을 확인할 수 있습니다. 이는 파이썬이 점 연산자로 속성에 접근할 때 먼저 인스턴스 자신의 네임스페이스(__dict__)를 살펴보고, 해당 속성이 없으면 클래스의 네임스페이스에서 차례로 검색하기 때문입니다.

따라서 foo.class_var, baz.class_var, 그리고 MyClass.class_var는 모두 동일한 값을 참조합니다. 단, 어떤 인스턴스에서 self.class_var = 값처럼 할당하면 그 인스턴스에만 새로운 속성이 생성되고 클래스 속성은 변경되지 않으므로 주의해야 합니다.