source

정적 메소드 - 다른 메소드에서 메소드를 호출하는 방법은 무엇입니까?

ittop 2023. 7. 16. 17:56
반응형

정적 메소드 - 다른 메소드에서 메소드를 호출하는 방법은 무엇입니까?

수업에서 다른 메소드를 호출하는 규칙적인 방법이 있을 때, 저는 이것을 해야 합니다.

class test:
    def __init__(self):
        pass
    def dosomething(self):
        print "do something"
        self.dosomethingelse()
    def dosomethingelse(self):
        print "do something else"

하지만 정적인 메서드가 있을 때는 쓸 수 없습니다.

self.dosomethingelse()

사례가 없기 때문입니다.같은 클래스의 다른 정적 메서드에서 정적 메서드를 호출하려면 파이썬에서 제가 무엇을 해야 합니까?

같은 클래스의 다른 정적 메서드에서 정적 메서드를 호출하려면 파이썬에서 어떻게 해야 합니까?

class Test():
    @staticmethod
    def static_method_to_call():
        pass

    @staticmethod
    def another_static_method():
        Test.static_method_to_call()

    @classmethod
    def another_class_method(cls):
        cls.static_method_to_call()

class.method작동해야 합니다.

class SomeClass:
  @classmethod
  def some_class_method(cls):
    pass

  @staticmethod
  def some_static_method():
    pass

SomeClass.some_class_method()
SomeClass.some_static_method()

참고 - 질문이 일부 변경된 것 같습니다.정적 메소드에서 인스턴스 메소드를 호출하는 방법에 대한 질문에 대한 대답은 에 인스턴스를 인수로 전달하거나 정적 메소드 내부에서 인스턴스를 인스턴스화하지 않고는 할 수 없다는 것입니다.

다음은 대부분 "다른 정적 메소드에서 정적 메소드를 어떻게 호출합니까?"라고 대답하는 것입니다.

Python에서는 정적 메소드와 클래스 메소드 사이에 차이가 있음을 명심하십시오.정적 메서드는 암시적인 첫 번째 인수를 사용하지 않는 반면, 클래스 메서드는 클래스를 암시적인 첫 번째 인수로 사용합니다(일반적으로cls관례에 의하여)이를 염두에 두고 다음과 같은 방법을 사용할 수 있습니다.

정적 방법인 경우:

test.dosomethingelse()

클래스 메소드인 경우:

cls.dosomethingelse()

전화할 수 있습니다.__class__.dosomethingelse()대신에self.dosomethingelse()호출된 함수가 호출자 정적 메서드와 동일한 클래스에 있는 경우.

class WithStaticMethods:
    @staticmethod
    def static1():
        print("This is first static")

    @staticmethod
    def static2():
        # WithStaticMethods.static1()
        __class__.static1()
        print("This is static too")


WithStaticMethods.static2()

인쇄:

This is first static
This is static too

클래스나 인스턴스에 따라 달라지지 않으면 함수로 만듭니다.

이것은 명백한 해결책처럼 보일 것이기 때문입니다.물론 덮어쓰기, 하위 분류 등이 필요하다고 생각하지 않는 한.그렇다면 이전 답이 최선의 방법입니다.저는 누군가의 요구에 맞거나 맞지 않을 수도 있는 대안적인 해결책을 제시했다고 해서 비난받지는 않을 것입니다.

정답은 해당 코드의 사용 사례에 따라 달라집니다. ;)

OK 클래스 메소드와 정적 메소드의 주요 차이점은 다음과 같습니다.

  • 클래스 메서드에는 고유한 ID가 있으므로 인스턴스 내에서 호출해야 합니다.
  • 반면에 정적 메서드는 클래스 내에서 호출되어야 할 수 있도록 여러 인스턴스 간에 공유될 수 있습니다.

정적 메서드에서 비정적 메서드를 호출할 수 없고 정적 메서드 내에 인스턴스를 생성하여 호출할 수 있습니다.

그렇게 작동해야 합니다.

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

    @staticmethod
    def dosomething():
        print "do something"
        # Creating an instance to be able to
        # call dosomethingelse(), or you
        # may use any existing instance
        a = test2()
        a.dosomethingelse()

    def dosomethingelse(self):
        print "do something else"

test2.dosomething()

언급URL : https://stackoverflow.com/questions/1859959/static-methods-how-to-call-a-method-from-another-method

반응형