클래스에서 다른 메서드를 호출하는 일반 메서드가있는 경우이 작업을 수행해야합니다.
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()
도움이 되길 바랍니다 🙂
답변
이것들이 클래스 나 인스턴스에 의존하지 않는다면 왜 그냥 함수로 만들지 않습니까? 이것이 명백한 해결책처럼 보일 것입니다. 물론 덮어 쓸 필요가 있다고 생각하지 않는 한, 하위 클래스 등. 그렇다면 이전 답변이 최선의 선택입니다. 나는 누군가의 필요에 맞을 수도 있고 그렇지 않을 수도있는 대체 솔루션을 제공하기 위해 점수를 매기 지 않을 것이다.).
정답은 해당 코드의 사용 사례에 따라 달라 지므로;) 즐기십시오