programing

Python 3.x에서 Python의 객체를 상속할 필요가 있습니까, 아니면 유용합니까?

golfzon 2023. 5. 4. 20:47
반응형

Python 3.x에서 Python의 객체를 상속할 필요가 있습니까, 아니면 유용합니까?

이전 Python 버전에서는 클래스를 만들 때 다음에서 상속할 수 있습니다.object이것은 당신의 클래스를 새로운 스타일의 클래스로 만들 수 있는 특별한 내장 파이썬 요소를 이해하는 것입니다.

최신 버전(> 3.0 및 2.6)은 어떻습니까?나는 구글에서 검색했습니다.object(명백한 이유로) 저는 너무 많은 결과를 얻습니다.

에서 상속할 필요가 없습니다.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

따라서 개체에서 명시적으로 상속되는 경우에는 암묵적인 상속을 허용하는 경우와는 다른 동작을 하게 됩니다.

언급URL : https://stackoverflow.com/questions/1238606/is-it-necessary-or-useful-to-inherit-from-pythons-object-in-python-3-x

반응형