programing tip

모든 파이썬 클래스가 객체를 확장해야합니까?

itbloger 2020. 7. 17. 20:56
반응형

모든 파이썬 클래스가 객체를 확장해야합니까?


나는 다음 두 가지 일을 모두 발견했다.

class Foo():
    def a(self):
        print "hello"

class Foo(object):
    def a(self):
        print "hello"

모든 파이썬 클래스가 객체를 확장해야합니까? 객체를 확장하지 않는 데 잠재적 인 문제가 있습니까?


파이썬 2에서 상속하지 않으면 object구식 클래스가 만들어지며 다른 스타일 중에서도 다른 type결과가 나타납니다.

>>> class Foo: pass
... 
>>> type(Foo())
<type 'instance'>

vs.

>>> class Bar(object): pass
... 
>>> type(Bar())
<class '__main__.Bar'>

또한 다중 상속 규칙 은 여기에서 요약하지도 않는 방식으로 다릅니다 . MI에 대해 본 모든 훌륭한 문서는 새로운 스타일의 클래스를 설명합니다.

마지막으로, 파이썬 3에서는 구식 클래스가 사라졌고 상속은 object암시 적으로되었습니다. 따라서 이전 소프트웨어와의 하위 호환성이 필요하지 않으면 항상 새로운 스타일 클래스를 선호하십시오.


파이썬 3에서 클래스는 object암묵적으로 확장 됩니다.

Python 2에는 구식 및 신식 클래스가 있습니다. 클래스가 새로운 스타일이라는 신호를 보내려면에서 명시 적으로 상속해야합니다 object. 그렇지 않은 경우 이전 스타일 구현이 사용됩니다.

당신은 일반적으로 새로운 스타일의 수업을 원합니다. object명시 적으로 상속합니다 . 이는 Python 2와 호환되는 Python 3 코드에도 적용됩니다.


파이썬 3에서는 세 가지 다른 방법으로 클래스를 만들 수 있으며 내부적으로 모두 동일합니다 (예 참조). 클래스를 만드는 방법은 중요하지 않지만 Python 3의 모든 클래스는 object 라는 특수 클래스에서 상속됩니다 . 클래스 객체 는 파이썬의 기본 클래스이며 이중 밑줄 메소드, 설명자, super () 메소드, property () 메소드 등과 같은 많은 기능을 제공합니다.

예 1.

class MyClass:
 pass

예 2.

class MyClass():
 pass

실시 예 3.

class MyClass(object):
  pass

예, 모든 Python 클래스는 객체를 확장해야합니다 (또는 서브 클래스, 여기서는 Python입니다). 일반적으로 심각한 문제는 발생하지 않지만 여러 상속 트리와 마찬가지로 일부 경우에는 이것이 중요합니다. 또한 Python 3과의 호환성이 향상됩니다.


python3에서는 차이가 없지만 python2에서는 확장하지 않으면 object구식 클래스가 제공됩니다. 이전 스타일 클래스보다 새로운 스타일 클래스를 사용하고 싶습니다.

참고 URL : https://stackoverflow.com/questions/15374857/should-all-python-classes-extend-object

반응형