[python] Object를 매개 변수로 사용하는 클래스

일부 파이썬 코드를 스칼라 코드로 번역하려고합니다. 그래서 저는 파이썬에서 완전히 멍청한 사람입니다.

그러나 일부 클래스는 개체를 매개 변수로 가지고 있지만 명시 적으로 사용하지 않는 이유는 무엇입니까? 애초에 그것을 매개 변수로 사용하는 이유는 무엇입니까?

예:

class Table(object)

시간 내 주셔서 감사합니다.



답변

Python2에서 이것은 새로운 스타일의 클래스 ( “클래식”클래스와 반대)로 선언 Table합니다 . Python3에서 모든 클래스는 새로운 스타일의 클래스이므로 더 이상 필요하지 않습니다.

새 스타일 클래스에는 클래식 클래스에없는 몇 가지 특수 속성이 있습니다.

class Classic: pass
class NewStyle(object): pass

print(dir(Classic))
# ['__doc__', '__module__']

print(dir(NewStyle))
# ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

또한 속성수퍼 는 클래식 클래스에서 작동하지 않습니다.

Python2에서는 모든 클래스를 새로운 스타일의 클래스로 만드는 것이 좋습니다. (표준 라이브러리의 많은 클래스는 이전 버전과의 호환성을 위해 여전히 클래식 클래스입니다.)

일반적으로 다음과 같은 성명에서

class Foo(Base1, Base2):

Foo기본 클래스 Base1Base2.

object파이썬의 모든 클래스의 어머니입니다. 새로운 스타일의 클래스이므로에서 상속 object하면 Table새로운 스타일의 클래스가됩니다.


답변

Table클래스라는 클래스를 확장한다 object. 논쟁이 아닙니다. object명시 적 으로 확장하려는 이유 는 클래스를 새로운 스타일의 클래스로 전환하기 때문입니다. 명시 적으로 extends를 지정하지 않으면 objectPython 3까지 기본적으로 구식 클래스가됩니다. (Python 3부터 명시 적으로 확장하든 안하든 모든 클래스는 새로운 스타일 object입니다.)

새 스타일 및 이전 스타일 클래스에 대한 자세한 내용 은이 질문을 참조하십시오 .


답변

“new-style”과 “old-style”클래스 구분은 Python 2.x에만 해당됩니다. 3.x에서는 모든 클래스가 “new-style”입니다.


답변

class Table과 class Table (object)는 파이썬과 다르지 않습니다.

매개 변수가 아니라 객체에서 확장됩니다 (다른 많은 언어와 마찬가지로 기본 클래스 임).

그것이 말하는 것은 “객체”에 정의 된 모든 것을 상속한다는 것입니다. 이것이 기본 동작입니다.


답변

object는 파이썬에 정의 된 가장 기본적인 클래스 객체 유형입니다. 개체의 속성은 다음과 같이 볼 수 있습니다.

** >>> dir (객체)

[ ‘ class ‘, ‘ delattr ‘, ‘ doc ‘, ‘ format ‘, ‘ getattribute ‘, ‘ hash ‘, ‘ init ‘, ‘ new ‘, ‘ reduce ‘, ‘ reduce_ex ‘, ‘ repr ‘, ‘ setattr ‘, ‘ sizeof ‘,’ str ‘,’ subclasshook ‘] **

그래서 Table (object)는 상속 일뿐입니다.!


답변

1) 클래스 이름 (객체) : 2) 클래스 이름 : 둘 다 같지만 첫 번째는 쓰기 측면에서 훨씬 더 좋으며 다른 클래스를 다른 클래스로 상속하면서 더 좋아 보이며 균질 해 보입니다.

얼마나 똑같습니까? 그래서 파이썬의 모든 것이 객체 아래에 있다는 것은 파이썬의 모든 것이 객체의 속성을 가지고 있음을 의미합니다. 처음에 우리는 두 번째로 명시 적으로 말하지 않았습니다.


답변