@staticmethod ??

Smiling Sammy·2022년 1월 10일
0

Python

목록 보기
4/6
post-thumbnail

개요

다른 사람의 코드를 확인하면서 함수 위에 데코레이터로
@staticmethod를 기입한 것을 발견했다.

저건 왜 쓰는거지..?

정적 메소드란?

  1. 클래스의 인스턴스 없이 호출이 가능하며, 인스턴스에서는 호출 할 수 없다.

    • ex1. 인스턴스 없이 호출

      >> Math.floor(3.14) --> better!!
      ----
      >> mm = Math()
      >> mm.floor(3.14)
    • ex.2 인스턴스에서는 호출 안됨 --> 이러한 이유로 모든 메서드를 정적으로 만들지 않음

      class Foo(object):
          def __init__(self):
              self.bar = 'bar'
          def too(self):
              print self.bar
          @staticmethod
          def foo():
              print self.bar
      
      Foo().too() # works
      Foo.foo() # doesn't work
  2. 유틸리티 함수를 만드는데 유용하게 사용된다

    • 유틸리티 함수: 여러 가지 계산과 처리를 대신하는 일반함수들, 반복적으로 사용되므로 잘 작정해두면 이후 작업이 간편해짐
    • ex. math.min, math.max

정적 메소드의 장단점

  • 장점: 유틸리티 클래스 같이 반복적으로 사용하므로 작업이 간편함, 코드의 가독성을 높여줌
  • 단점: 상태를 가지고 있지 않은 단순히 메소드만 가지고 있는 구조이기 때문에, 객체 지향에 벗어난 개념이 됨

@classmethod와 @staticmethod의 차이

  • 상속에서 두 메소드 간에 차이가 있음
  • staticmethod는 부모 클래스의 클래스 속성 값을 가져옴
  • classmethod는 현재 클래스의 클래스 속성 값을 가져옴
class Person:
    default= "아빠"
    
     def __init__(self):
        self.data = self.default
    
    @classmethod
    def class_person(cls):
        return cls()
    
    @staticmethod
    def static_person():
        return Person()
    
class WhatPerson(Person):
    default = "엄마"
    
person1 = WhatPerson.class_person()    # return 엄마
person2 = WhatPerson.static_person()   # return 아빠

참고

profile
Data Scientist, Data Analyst

0개의 댓글