파이썬에서의 정적 클래스 멤버

조회수 5931회

파이썬 클래스 안에 정적인 멤버 변수나 함수를 만들 수 있나요? 어떤 문법을 이용해야하나요?

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    함수 내부가 아닌 클래스 내부에 선언된 변수는 클래스나 정적 변수입니다 :

    >>> class MyClass:
    ...     i = 3
    ...
    >>> MyClass.i
    3 
    

    위 코드는 클래스 레벨의 변수 "i"를 생성해주지만 인스턴스 레벨의 "i"와는 전혀 다른 변수입니다. 따라서 아래와 같은 결과를 볼 수 있죠.

    >>> m = MyClass()
    >>> m.i = 4
    >>> MyClass.i, m.i
    >>> (3, 4)
    

    이는 C++이나 Java와는 다소 다르지만, 인스턴스를 참조하여 정적 멤버에 접근할 수 없는 C#과는 유사한 모습을 보이고 있습니다.

    클래스와 class 객체에 대해 다루고 있는 파이썬 튜토리얼의 설명을 한번 참고해보세요.

    또한 파이썬 라이브러리 레퍼런스의 "Built-in Functions"의 내용을 보시면 정적 함수를 만드는 방법이 나와있습니다.

    class C:
        @staticmethod
        def f(arg1, arg2, ...): ...
    

    클래스의 타입을 첫번째 매개변수로 받아들인다는 점에서 staticmethod보다는 classmethod를 추천하는 사람들도 있는데, 저는 그것이 staticmethod를 이용하는 방법에 비해 어떤 이점을 더 주는지 잘 모르겠네요. 저처럼 큰 이점을 느끼지 못하신다면 그냥 staticmethod를 이용하시면 될 듯 합니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)