-
(Python) ClassName(object) vs ClassName 차이IT 지식 창고 2020. 8. 11. 18:48
원문 : https://stackoverflow.com/questions/4015417/python-class-inherits-object
python에서 class를 만들 때 classname(object) : 를 하는 경우가 있고, classname : 하는 경우가 있습니다.
stackoverflow에서 이를 대표적으로 설명해놓은 글이 있는데, 간단히 핵심만 적어보고자 합니다.
우선 Python3에서는 Python2간의 호환성을 제외하고는 이유가 없으며, Python2에서는 많은 이유가 있습니다.
Python 3.x
class ClassName1: pass class ClassName2(object): pass class ClassName3(): pass
위와 같은 경우에
[object in cls.__bases__ for cls in {ClassName1, ClassName2, ClassName3}] [True, True, True]
다 같은 object로 취급합니다.
Python 2.x에서는 클래스에서 상속을 하는 것에 따라, old-style(classic-style), new-style이라고 합니다.
1. old-style(classic-style)
class ClassName: # no base class pass
output
ClassName.__bases__ ()
2. new-style
class ClassName(object): pass
output
ClassName.__bases__ (<type 'object'>,)
이렇게 python 2.x에서는 두개의 type이 다릅니다.
따라서, python 3.x 에서는 어떤 형태든 직접적인 상속과 암묵적인 상속이 이뤄지고,
python 2.x에서는 직접적인 상속을 하는 것과 하지 않는 것의 차이가 있습니다.
요즘은 python 3.x를 사용하는 추세이므로 신경쓸필요는 없으나, python 2.x와의 호환성을 고려한다면 항상 class뒤에 object를 상속하면 될 것 같습니다.
'IT 지식 창고' 카테고리의 다른 글
(model) Mask_RCNN GPU 메모리 최적화 (0) 2020.08.16 (Python) try vs if 써야 하는 상황 (0) 2020.08.11 (python) class내에 def내에서 def부르는 법 (0) 2020.08.06 (PostGIS) Shp2postgis 'libintl-9.dll' error (0) 2020.08.04 (QGIS) 좌표계 재투영(재정의) (0) 2020.08.04 댓글