https://wikidocs.net/16074

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

1. 정적메소드(@classmethod와 @staticmethod)

  • 정적메소드라 함은 클래스에서 직접 접근할 수 있는 메소드입니다.
  • 파이썬에서는 클래스에서 직접 접근할 수 있는 메소드가 두가지가 있습니다.staticmethod와 classmethod 입니다.
  • 하지만 파이썬에서는 다른언어와는 다르게 정적메소드임에도 불구하고 인스턴스에서도 접근이 가능합니다. 이 차이에 유의해야합니다.
  • 에디터에서 static_method.py파일을 작성합니다.
  • 인스턴스 메소드는 첫번째 인자로 객체 자신 self자신을 입력합니다.
  • classmethod는 첫번째 인자로 클래스를 입력합니다.
  • staticmethod는 특별히 추가되는 인자가 없습니다.
class hello:
    t = '내가 상속해 줬어'

    @classmethod
    def calc(cls):
        return cls.t

class hello_2(hello):
    t = '나는 상속 받았어'

print(hello_2.calc())
#결과
내가 상속해 줬어

@staticmethod

즉, 스태틱 메서드는 그냥 클래스 바깥에 정의된 일반 함수와 완전히 동일하게 동작한다.

다만, 특정 클래스와 보다 밀접한 관계가 있다는 것을 나타내기위해,

혹은 조금이라도 코드를 줄여 간단하게 표현하기 위해 @staticmethod 키워드를 사용해 정의하는 것

 

https://suwoni-codelab.com/python%20%EA%B8%B0%EB%B3%B8/2018/03/11/Python-Basic-class-staticmethod/

 

Python(파이썬) 기본 - 43. class 정리 - 정적메소드 @classmethod와 @staticmethod의 정리

Python에서 class에서 정적메소드를 정리합니다.

suwoni-codelab.com

 

@property 사용하기

접근제어자(Access Modifier)

접근 제어자에는 public , private , protected , default 가 있다.
파이썬은 다른언어와 달리 접근 제어자가 없고 작명법으로 접근을 제어할 수 있다. 파이썬에서의 작명법은 아래와 같다.

  • public → 접두사에 아무 밑줄이 없다.
  • private → 접두사에 두개의 밑줄(__)을 적용
  • protected → 접두사에 한개의 밑줄(_) 을 적용
class Example :
    def __init__(self):
        pass
    def public(self): 
        print('public')
    def _protected(self):
        print('protected')
    def __private(self):
        print('private')

Get, Set

다른 언어에서 private 를 사용한 속성값이 있을때 그것을 가져오기 위해서는 get , set 메소드를 쓴다. 파이썬에서는 다음과 같이 사용할 수 있다.

class Person :
    def __init__(self):
        self.__name = 'hong'
    def get_name(self): 
        return self.__name
    def set_name(self, name):
        self.__name = name

 

위와 같이 get , set 메소드를 만들면 함수가 너무 많아지고 복잡해진다.

@property

파이썬에서는 @property 데코레이터를 이용하여 위의 get , set 메소드보다 더욱 직관적으로 표현이 가능하다.

class Person :
    def __init__(self):
        self.__name = 'hong'
        
    @property
    def name(self): 
        return self.__name
        
    @name.setter
    def name(self, name):
        self.__name = name
        
person = Person()
print(person.name)    # hong

person.name = 'park'
print(person.name)    # park

get의 역할은 property , set의 역할은 setter가 한다. property 가 setter 보다 윗줄에 사용되어야 한다.

https://medium.com/@hckcksrl/python-property-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-89eb0f0e2e56

+ Recent posts