파이썬에서 함수가 무시되는 것을 방지하는 방법 [복제
-
19-09-2019 - |
문제
이 질문은 이미 여기에 답이 있습니다.
- 기능을 재정의 할 수 없습니다 4 답변
클래스 기능을 비정상적으로 만들 수있는 방법이 있습니까? Java와 같은 것 final
예어. 즉, 모든 우선 클래스는 해당 메소드를 무시할 수 없습니다.
해결책
문제는 Java 철학을 사용하여 파이썬으로 쓰려고한다는 것입니다. 어떤 것이 뒤집 히는 있지만, 그들 모두는 아닙니다. 파이썬에서는 다음을 수행 할 수 있으며 완벽하게 괜찮지 만 Java가 물체를 어떻게 생각하는지 완전히 반대합니다.
class Thing(object):
x = 1
something = Thing()
something.y = something.x
당신이 정말로 그것을 원한다면, 당신은 여기에 게시 된 코드. 그러나 보시다시피 원하는대로 할 수있는 코드가 많이 있습니다. 또한 코드를 게시 한 사람조차도 사용을 통과하여 통과 할 수 있다고 말합니다. __dict__
또는 object.__setattr__
.
다른 팁
다음의 효과에 대해 의견을 제시 할 수 있습니다.
# We'll fire you if you override this method.
이 작업과 같은 저 기술 솔루션이 실제로 얼마나 잘 작동하는지 놀랍습니다.
예,하지 마십시오.
다운 투표 후에 이것에 추가해야합니다. 이러한 보호 메커니즘은 일부 사람들에 의해 파이썬의 정신에 반대하는 것으로 보인다. "우리는 모두 여기에 성인을 동의하고있다". 그리고 의견이 충분하지 않으면 왜 '더 강한'것이 있습니까?
나는 당신의 기대를 문서화하고 다른 프로그래머들이 책임감있게 행동하기를 기대합니다.
클래스의 방법 전에 이중 밑줄을 사용하는 것은 단순한 명명 규칙이 아닙니다. 그렇게함으로써 메소드 이름이 엉망이됩니다 classname(_classname__methodname())
.
이중 밑줄이있는 메소드가있는 클래스를 상속함으로써, 아동 클래스의 경우 위의 지정된 메소드를 무시하기가 어려워집니다. 이 관행은 Java에서 최종적으로 거의 동일합니다.