[python] Python 3.x의 Python 객체에서 상속하는 것이 필요하거나 유용합니까?

이전 파이썬 버전에서는 파이썬에서 클래스를 만들 때 객체 에서 상속 할 수 있습니다. 내가 이해하는 한 객체를 새로운 스타일 객체로 허용하는 특수 내장 파이썬 요소를 이해합니다.

최신 버전 (> 3.0 및 2.6)은 어떻습니까? 나는 클래스 객체에 대해 검색했지만 너무 많은 결과를 얻었습니다 (분명한 이유로). 힌트가 있습니까?

감사!



답변

object파이썬 3에서 새로운 스타일 을 얻기 위해에서 상속 할 필요가 없습니다. 모든 클래스는 새로운 스타일입니다.


답변

나는 이것이 오래된 질문이라는 것을 알고 있지만 파이썬 3 에서도이 두 가지가 완전히 같지 않다는 점에 주목할 가치가 있습니다.

에서 명시 적으로 상속하는 경우 object실제로 수행하는 작업은 해당 시점이 가리키는 내용에 관계없이 에서 상속 builtins.object 하는 것입니다.

따라서 어떤 이유로 객체를 재정의하는 (매우 이상한) 모듈을 가질 수 있습니다. 이 첫 번째 모듈을 “newobj.py”라고 부를 것입니다.

import builtins

old_object = builtins.object  # otherwise cyclic dependencies

class new_object(old_object):

    def __init__(self, *args, **kwargs):
        super(new_object, self).__init__(*args, **kwargs)
        self.greeting = "Hello World!"

builtins.object = new_object  #overrides the default object

그런 다음 다른 파일 ( “klasses.py”)에서 :

class Greeter(object):
    pass

class NonGreeter:
    pass

그런 다음 세 번째 파일 (실제로 실행할 수 있음) :

import newobj, klasses  # This order matters!

greeter = klasses.Greeter()
print(greeter.greeting)  # prints the greeting in the new __init__

non_greeter = klasses.NonGreeter()
print(non_greeter.greeting) # throws an attribute error

따라서 객체에서 명시 적으로 상속하는 경우 암시 적 상속을 허용하는 것과 다른 동작이 발생 함을 알 수 있습니다.


답변