>  기사  >  백엔드 개발  >  데코레이터 @staticmethod와 @classmethod의 차이점은 무엇입니까?

데코레이터 @staticmethod와 @classmethod의 차이점은 무엇입니까?

anonymity
anonymity원래의
2019-05-24 14:58:206487검색

데코레이터 @staticmethod와 @classmethod의 차이점은 다음과 같습니다. @staticmethod에는 self 및 cls 매개변수가 필요하지 않으며, @classmethod에는 self 매개변수가 필요하지 않지만 cls 매개변수가 필요합니다.

데코레이터 @staticmethod와 @classmethod의 차이점은 무엇입니까?

일반적으로 클래스의 메서드를 사용할 때는 먼저 클래스를 인스턴스화한 다음 인스턴스화된 클래스를 사용하여 해당 메서드를 호출해야 합니다.

class Test(object):
    """docstring for Test"""
    def __init__(self, arg=None):
        super(Test, self).__init__()
        self.arg = arg
    def say_hi(self):
        print 'hello wrold'
def main():
    test = Test() //1. 首先实例化test类
    test.say_hi() //2. 再调用类的方法
if __name__ == '__main__':
    main()

@staticmethod 또는 @classmethod를 사용하면 필요하지 않습니다. 인스턴스화하려면 클래스 이름.메서드 이름()을 직접 호출하세요.

이것은 코드를 정리하고, 특정 클래스에 속해야 하는 특정 함수를 해당 클래스에 넣는 데 도움이 되며, 네임스페이스를 깔끔하게 유지하는 데도 도움이 됩니다.

class Test(object):
    """docstring for Test"""
    def __init__(self, arg=None):
        super(Test, self).__init__()
        self.arg = arg
    def say_hi(self):
        print 'hello wrold'
    @staticmethod
    def say_bad():
        print 'say bad'
    @classmethod
    def say_good(cls):
        print 'say good'
def main():
    test = Test()
    test.say_hi()
    Test.say_bad() //直接类名.方法名()来调用
    Test.say_good() //直接类名.方法名()来调用
if __name__ == '__main__':
    main()

@staticmethod와 @classmethod의 차이점

클래스의 일반적인 메서드로 하나의 매개변수는 자신을 나타내기 위해 self 매개변수가 필요합니다.

@staticmethod는 함수를 사용하는 것처럼 자체 객체의 자체와 자체 클래스의 cls 매개변수를 나타낼 필요가 없습니다.

@classmethod에는 self 매개변수가 필요하지 않지만 첫 번째 매개변수는 자체 클래스를 나타내는 cls 매개변수여야 합니다.

위 내용은 데코레이터 @staticmethod와 @classmethod의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.