질문 : 파이썬 클래스는 왜 객체를 상속합니까?
object
에서 상속하는 이유가 있습니까?
방금이 작업을 수행하는 코드를 찾았고 그 이유를 찾을 수 없습니다.
class MyClass(object):
# class code follows...
답변
Python 3에서는 Python 2와 3 간의 호환성을 제외하고는 이유가 없습니다 . Python 2에서는 여러 가지 이유가 있습니다.
Python 2.x story:
object
의 존재 여부에 따라 두 가지 스타일의 클래스가 있습니다.
- "클래식"스타일 클래스 : 기본 클래스로
object
>>> class ClassicSpam: # no base class ... pass >>> ClassicSpam.__bases__ ()
- "새로운"스타일 클래스 : 직접 또는 간접적으로 (예 : 내장 유형 에서 상속) 기본 클래스로
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'>,)
의심 할 여지없이, 수업을 작성할 때 항상 새로운 스타일의 수업을 원할 것입니다. 그렇게함으로써 얻을 수있는 특전은 다음과 같습니다.
- 설명자 지원 . 구체적으로 설명자를 사용하면 다음과 같은 구성이 가능합니다.
classmethod
: 인스턴스 대신 암시 적 인수로 클래스를받는 메서드입니다.staticmethod
: 암시 적 인수self
를 첫 번째 인수로받지 않는 메서드입니다.- 속성이있는
property
: 속성의 가져 오기, 설정 및 삭제를 관리하는 함수를 만듭니다. __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
'프로그래밍 언어 > Python' 카테고리의 다른 글
파이썬의 람다에서 "if"를 수행하는 방법 (0) | 2021.10.08 |
---|---|
Python 반복 함수를 생성하는 방법 (0) | 2021.10.08 |
파이썬에서 배열의 마지막 요소 가져오기 (0) | 2021.10.07 |
Python의 subprocess.PIPE에 대한 비 차단 읽기 (0) | 2021.10.06 |
Python에서 HTTP GET을 수행하는 가장 빠른 방법 (0) | 2021.10.06 |