"파이썬 @classmethod @staticmethod"의 두 판 사이의 차이

 
(사용자 3명의 중간 판 10개는 보이지 않습니다)
6번째 줄: 6번째 줄:
==일반 메소드 (InstanceMethod)==
==일반 메소드 (InstanceMethod)==


<source lang='python'>
<syntaxhighlight lang='python'>
class InstanceMethod(object):
class InstanceMethod(object):
     def __init__(self):
     def __init__(self):
16번째 줄: 16번째 줄:
IM = InstanceMethod()  
IM = InstanceMethod()  
print(IM.get_class_name())
print(IM.get_class_name())
</source>
</syntaxhighlight>
:→ 인스턴스 IM 생성후, 생성된 인스턴스 IM으로 get_class_name 메소드 호출
:→ 인스턴스 IM 생성후, 생성된 인스턴스 IM으로 get_class_name 메소드 호출


==@classmethod==
==@classmethod==
*클래스 메소드는 일반 메소드와 달리 인스턴스를 생성없이 곧장 클래스를 통한 메소드 호출이 가능
*클래스 메소드는 일반 메소드와 달리 인스턴스 생성없이 곧장 클래스를 통한 메소드 호출이 가능하다.
*인스턴스의 생성을 통해서도 메소드 호출이 가능
*일반 메소드가 <code>self</code>를 넘기는 것처럼 클래스인<code>cls</code>를 넘겨준다.
<source lang='python'>
*인스턴스의 생성을 통해서도 메소드 호출이 가능하다.
<syntaxhighlight lang='python' run>
class ClassMethod(object):
class ClassMethod(object):
     def __init__(self):
     def __init__(self):
32번째 줄: 33번째 줄:


print(ClassMethod.get_class_name())
print(ClassMethod.get_class_name())
</source>
</syntaxhighlight>


==@staticmethod==
==@staticmethod==
<source lang='python'>
*스태틱 메소드는 인스턴스 없이 호출이 가능하다는 점에서 @classmethod와 동일하나 <code>cls</code>를 넘겨주지 않아도 된다는 점에서는 차이가 있다.
*인스턴스의 생성을 통해서도 메소드 호출이 가능하다.
<syntaxhighlight lang='python' run>
class StaticMethod(object):
class StaticMethod(object):


48번째 줄: 51번째 줄:


print(StaticMethod.get_class_name())
print(StaticMethod.get_class_name())
</source>
</syntaxhighlight>


==같이 보기==
==같이 보기==

2021년 5월 13일 (목) 21:56 기준 최신판

1 개요[ | ]

python @classmethod, @staticmethod
  • 파이썬에서 @classmethod와 @staticmethod 차이점을 알아보자.
각 차이점을 이해하기 위해 클래스 이름을 얻는 메소드를 Instance Method, Class Method, Static Method 의 형태로 각각 구현해 보자.

2 일반 메소드 (InstanceMethod)[ | ]

class InstanceMethod(object):
    def __init__(self):
        pass

    def get_class_name(self):
        return self.__class__.__name__

IM = InstanceMethod() 
print(IM.get_class_name())
→ 인스턴스 IM 생성후, 생성된 인스턴스 IM으로 get_class_name 메소드 호출

3 @classmethod[ | ]

  • 클래스 메소드는 일반 메소드와 달리 인스턴스 생성없이 곧장 클래스를 통한 메소드 호출이 가능하다.
  • 일반 메소드가 self를 넘기는 것처럼 클래스인cls를 넘겨준다.
  • 인스턴스의 생성을 통해서도 메소드 호출이 가능하다.
class ClassMethod(object):
    def __init__(self):
        pass

    @classmethod
    def get_class_name(cls):
        return cls.__name__

print(ClassMethod.get_class_name())

4 @staticmethod[ | ]

  • 스태틱 메소드는 인스턴스 없이 호출이 가능하다는 점에서 @classmethod와 동일하나 cls를 넘겨주지 않아도 된다는 점에서는 차이가 있다.
  • 인스턴스의 생성을 통해서도 메소드 호출이 가능하다.
class StaticMethod(object):

    classname = 'StaticMethod'

    def __init__(self):
        pass

    @staticmethod
    def get_class_name():
        return StaticMethod.classname

print(StaticMethod.get_class_name())

5 같이 보기[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}