developer tip

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

copycodes 2020. 10. 18. 18:28
반응형

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


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

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

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

  • class method has its own identity, that's why they have to be called from within an INSTANCE.
  • on the other hand static method can be shared between multiple instances so that it must be called from within THE CLASS

you cant call non-static methods from static methods but by creating an instance inside the static method.... it should work like that

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

hope that will help you :)


If these don't depend on the class or instance then why not just make them a function? As this would seem like the obvious solution. Unless of course you think it's going to need to be overwritten, subclass etc. If so then the previous answers are the best bet. Fingers crossed I wont get marked down for merely offering an alternative solution that may or may not fit someones needs ;).

As the correct answer will depend on the use case of the code in question ;) Enjoy

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

반응형