프로그래밍 언어/Python

파이썬 클래스가 객체를 상속하는 이유

Rateye 2021. 10. 7. 10:47
728x90
반응형
질문 : 파이썬 클래스는 왜 객체를 상속합니까?

object 에서 상속하는 이유가 있습니까?

방금이 작업을 수행하는 코드를 찾았고 그 이유를 찾을 수 없습니다.

class MyClass(object):
    # class code follows...
답변

Python 3에서는 Python 2와 3 간의 호환성을 제외하고는 이유가 없습니다 . Python 2에서는 여러 가지 이유가 있습니다.


Python 2.x story:

object 의 존재 여부에 따라 두 가지 스타일의 클래스가 있습니다.

  1. "클래식"스타일 클래스 : 기본 클래스로 object
    >>> class ClassicSpam: # no base class ... pass >>> ClassicSpam.__bases__ ()
  2. "새로운"스타일 클래스 : 직접 또는 간접적으로 (예 : 내장 유형 에서 상속) 기본 클래스로 object
    >>> class NewSpam(object): # directly inherit from object ... pass >>> NewSpam.__bases__ (<type 'object'>,) >>> class IntSpam(int): # indirectly inherit from object... ... pass >>> IntSpam.__bases__ (<type 'int'>,) >>> IntSpam.__bases__[0].__bases__ # ... because int inherits from object (<type 'object'>,)

 

 

의심 할 여지없이, 수업을 작성할 때 항상 새로운 스타일의 수업을 원할 것입니다. 그렇게함으로써 얻을 수있는 특전은 다음과 같습니다.

  • 설명자 지원 . 구체적으로 설명자를 사용하면 다음과 같은 구성이 가능합니다.
    1. classmethod : 인스턴스 대신 암시 적 인수로 클래스를받는 메서드입니다.
    2. staticmethod : 암시 적 인수 self 를 첫 번째 인수로받지 않는 메서드입니다.
    3. 속성이있는 property : 속성의 가져 오기, 설정 및 삭제를 관리하는 함수를 만듭니다.
    4. __slots__ : 클래스의 메모리 소비를 절약하고 속성 액세스를 더 빠르게합니다. 물론 제한이 있습니다.
  • __new__ 정적 메서드 : 새 클래스 인스턴스가 생성되는 방식을 사용자 지정할 수 있습니다.
  • MRO (Method Resolution Order) : 호출 할 메소드를 확인하려고 할 때 클래스의 기본 클래스가 검색되는 순서입니다.
  • MRO와 관련하여 super . 또한 super() 는 super로 간주됩니다.

 

object 에서 상속하지 않으면 잊어 버리십시오. "새로운"스타일 클래스의 다른 특전과 함께 이전 글 머리 기호에 대한 자세한 설명은 여기 에서 찾을 수 있습니다.

새로운 스타일의 클래스의 단점 중 하나는 클래스 자체가 더 많은 메모리를 요구한다는 것입니다. 그러나 많은 클래스 객체를 생성하지 않는 한, 이것이 문제가 될 것이며 긍정적 인 바다에 부정적인 영향을 미치는 것은 아닌지 의심됩니다.


Python 3.x story:

Python 3에서는 모든 것이 단순화되었습니다. 새로운 스타일의 클래스 만 존재하므로 (일반적으로 클래스라고 함) object 를 추가 할 때의 유일한 차이점은 8 자 더 입력해야한다는 것입니다. 이:

class ClassicSpam:
    pass

다음과 완전히 동일합니다 (이름 :-제외).

class NewSpam(object):
     pass

그리고 이것에 :

class Spam():
    pass

모두 __bases__ object 가 있습니다.

>>> [object in cls.__bases__ for cls in {Spam, NewSpam, ClassicSpam}]
[True, True, True]

그렇다면 어떻게 해야 될까?

Python 2 : 항상 명시 적으로 object 에서 상속 합니다. 특전을 받으세요.

Python 3 : object 에서 상속합니다. 즉, Python 2와 Python 3에서 모두 작동해야합니다. 그렇지 않으면 작동하지 않습니다. Python이 다음을 위해 삽입하므로 실제로 차이가 없습니다. 당신은 뒤에서.

출처 : https://stackoverflow.com/questions/4015417/why-do-python-classes-inherit-object
728x90
반응형