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

클래스에서 다른 메서드를 호출하는 일반 메서드가있는 경우이 작업을 수행해야합니다.

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

하지만 정적 메서드가 있으면 쓸 수 없습니다.

self.dosomethingelse()

인스턴스가 없기 때문입니다. 같은 클래스의 다른 정적 메서드에서 정적 메서드를 호출하려면 Python에서 어떻게해야합니까?

편집 : 엉망입니다. 네, 질문을 원래 질문으로 되돌 렸습니다. 저는 이미 Peter Hansen의 의견에있는 두 번째 질문에 대한 답을 가지고 있습니다. 내가 이미 가지고있는 답변에 대해 다른 질문을 열어야한다고 생각한다면 plz 말해주세요.



답변

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에서 어떻게해야합니까?

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()


답변

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

다음은 대부분 “다른 정적 메서드에서 정적 메서드를 호출하는 방법”에 대한 답변입니다.

마음에 곰이 있다는 것입니다 파이썬에서 정적 메소드와 클래스 메소드의 차이. 정적 메서드는 암시 적 첫 번째 인수를 사용하지 않는 반면 클래스 메서드는 클래스를 암시 적 첫 번째 인수로 사용합니다 (보통cls 으로 규칙에 따라). 이를 염두에두고이를 수행하는 방법은 다음과 같습니다.

정적 메서드 인 경우 :

test.dosomethingelse()

클래스 메서드 인 경우 :

cls.dosomethingelse()


답변

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

  • 클래스 메서드는 고유 한 ID를 가지고 있으므로 INSTANCE 내에서 호출해야합니다.
  • 반면에 정적 메서드는 여러 인스턴스간에 공유 될 수 있으므로 THE CLASS 내에서 호출해야합니다.

답변

정적 메서드에서 비 정적 메서드를 호출 할 수는 없지만 정적 메서드 내부에 인스턴스를 생성하면됩니다.

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 instace
        a=test2()
        a.dosomethingelse()

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

test2.dosomething()

도움이 되길 바랍니다 🙂


답변

이것들이 클래스 나 인스턴스에 의존하지 않는다면 왜 그냥 함수로 만들지 않습니까? 이것이 명백한 해결책처럼 보일 것입니다. 물론 덮어 쓸 필요가 있다고 생각하지 않는 한, 하위 클래스 등. 그렇다면 이전 답변이 최선의 선택입니다. 나는 누군가의 필요에 맞을 수도 있고 그렇지 않을 수도있는 대체 솔루션을 제공하기 위해 점수를 매기 지 않을 것이다.).

정답은 해당 코드의 사용 사례에 따라 달라 지므로;) 즐기십시오


답변