문제

이 질문은 이미 여기에 답이 있습니다.

클래스 기능을 비정상적으로 만들 수있는 방법이 있습니까? 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에서 최종적으로 거의 동일합니다.

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