복붙노트

[PYTHON] 파이썬에서 함수가 오버라이드되는 것을 막는 법

PYTHON

파이썬에서 함수가 오버라이드되는 것을 막는 법

클래스 함수를 재정의 할 수있는 방법이 있습니까? 자바 최종 키워드와 같은 것. i.n, 우선하는 클래스는 그 메소드를 오버라이드 (override) 할 수 없습니다.

해결법

  1. ==============================

    1.문제는 Java 철학을 사용하여 Python으로 작성하려고하는 것입니다. 어떤 것은 이월되지만 전부는 아닙니다. 파이썬에서는 다음을 할 수 있으며 완벽하게 훌륭하지만 자바가 객체를 어떻게 생각하는지에 대해서는 완전히 반대합니다.

    문제는 Java 철학을 사용하여 Python으로 작성하려고하는 것입니다. 어떤 것은 이월되지만 전부는 아닙니다. 파이썬에서는 다음을 할 수 있으며 완벽하게 훌륭하지만 자바가 객체를 어떻게 생각하는지에 대해서는 완전히 반대합니다.

    class Thing(object):
        x = 1
    something = Thing()
    something.y = something.x
    

    정말로 원한다면 여기에 게시 된 코드를 사용해보십시오. 그러나 당신이 볼 수 있듯이, 당신이 원하는 것을하기 위해 많은 코드가 있습니다. 코드를 게시 한 사람조차도 __dict__ 또는 object .__ setattr__을 사용하여 전달할 수 있다고 말합니다.

  2. ==============================

    2.거기에 코멘트를 넣어서 다음과 같은 효과를 낼 수 있습니다.

    거기에 코멘트를 넣어서 다음과 같은 효과를 낼 수 있습니다.

    # We'll fire you if you override this method.
    

    이 기술이 어떻게 실제로 잘 작동하는지는 놀랍습니다.

  3. ==============================

    3.예, 있습니다.하지 마십시오.

    예, 있습니다.하지 마십시오.

    나는 아래 투표 후에 이것을 덧붙여 야합니다. 이러한 보호 메커니즘은 일부 사람들이 파이썬의 정신에 반하는 것으로 간주됩니다. "우리는 모두 여기에 성인을 동의하고 있습니다."당신은 그러한 기능을 보호하고 싶습니까? 그리고 코멘트가 충분하지 않은 경우 왜 '강한'것이 있습니까?

    나는 당신의 기대를 문서화하고 다른 프로그래머들이 책임있게 행동 할 것을 기대한다.

  4. ==============================

    4.클래스의 메서드 앞에 이중 밑줄을 사용하는 것은 명명 규칙이 아닙니다. 이렇게하면 메소드 이름은 classname (_classname__methodname ())으로 변경됩니다.

    클래스의 메서드 앞에 이중 밑줄을 사용하는 것은 명명 규칙이 아닙니다. 이렇게하면 메소드 이름은 classname (_classname__methodname ())으로 변경됩니다.

    그 앞에 두 개의 밑줄이있는 메소드로 클래스를 상속함으로써 하위 클래스의 경우 위에 지정된 메소드를 재정의하는 것이 어려워집니다. 이 방법은 java의 final과 거의 같습니다.

  5. from https://stackoverflow.com/questions/2425656/how-to-prevent-a-function-from-being-overridden-in-python by cc-by-sa and MIT license