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

StackOverflow https://stackoverflow.com/questions/1859959

  •  13-09-2019
  •  | 
  •  

문제

수업에서 다른 방법을 호출하는 정기적 인 방법이 있으면이 작업을 수행해야합니다.

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

그러나 정적 방법이있을 때는 쓸 수 없습니다

self.dosomethingelse()

인스턴스가 없기 때문입니다. 동일한 클래스의 다른 정적 메소드에서 정적 메소드를 호출하기 위해 Python에서 어떻게해야합니까?

편집 : 얼마나 혼란. 좋아, 나는 질문을 원래 질문으로 편집했다. 피터 한센의 의견에있는 두 번째 질문에 대한 답이 이미 있습니다. 내가 이미 가지고있는 답변에 대한 또 다른 질문을해야한다고 생각한다면, 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()

OK 클래스 방법과 정적 방법의 주요 차이점은 다음과 같습니다.

  • 클래스 방법에는 고유 한 정체성이 있으므로 인스턴스 내에서 호출해야합니다.
  • 반면에 정적 메소드는 여러 인스턴스간에 공유하여 클래스 내에서 호출해야합니다.

정적 메소드에서 비 정적 메소드를 호출 할 수 없지만 정적 메소드 내부에 인스턴스를 만들어 ....

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

도움이되기를 바랍니다. :)

이것들이 클래스 나 인스턴스에 의존하지 않는다면 왜 기능으로 만들지 않습니까? 이것은 명백한 해결책처럼 보일 것입니다. 물론 당신은 그것이 덮어 쓰기, 서브 클래스 등을 쓸 필요가 없다고 생각하지 않는 한, 이전 답변이 가장 좋은 방법입니다. 손가락을 건너 나는 단지 어떤 것들이 필요에 맞을 수도 있고 아닐 수도있는 대체 솔루션을 제공하기 위해 표시되지 않을 것입니다.).

정답은 해당 코드의 사용 사례에 따라 다르므로 즐기십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top