2011-04-05 7 views
4

XML 파일이 포함 된 스트림을 예상하는 클래스가 있습니다.
필자는 파일 스트림이 필요 없으며 데이터베이스, 소켓 등과 같은 다른 소스를 사용하려고합니다.
다른 소스에서 스트림 인터페이스를 제공하려면 어떤 클래스를 io module에서 서브 클래스해야합니까?Python에서 스트림 클래스 만들기

+1

소켓은 이미 다른 파일과 인터페이스가 동일합니다. 데이터베이스 연결은 일반적으로'blob '을 제공하는데,'blob'은'StringIO'를 사용하여 파일 라인 객체로 바뀔 수 있습니다. "스트림"인터페이스 (즉, 파이썬의'file')가 이미 존재할 때 무언가를 서브 클래 싱하는 이유는 무엇입니까? 고유하거나 다른 점은 무엇입니까? –

+0

왜 파생됩니까? 파이썬은 C++이 아닙니다. 적절한'read()'메소드를 가진 뭔가를 전달하는 것만으로 충분하지 않습니까? – 6502

+0

@ 6502 : XML 파일을 데이터베이스에서 스트림으로로드 할 수 있습니다. 나는 단지 행동을 캡슐화하고있다. –

답변

4

동적 타이핑을 사용하면이 경우 모든 기본 클래스에서 하위 클래스로 분류 할 수 없습니다. 적절한 메소드를 구현해야한다. Blog post on the subject

+0

내가 얻지 못하는 이유는 하위 클래스를 사용하지 않아야하는 이유입니다. 어쨌든 내 인터페이스는 스트림의 인터페이스 여야합니다. –

+0

상속 메커니즘을 사용하여 하위 클래스를 만들 수 없으며 클래스를 만들고 필요한 서명이 필요한 메소드를 구현할 수 있다고 썼습니다. – Andrey

0

Andrey이 제공 한 답변이 완전히 올바르지 않습니다.

파이썬에서 스트림은 "파일 형"객체입니다. io 모듈에 정의 된 도구를 사용하여 읽고 쓸 수 있습니다. 이 모듈은 또한 스트림 객체를 정의하려는 경우 구현해야하는 인터페이스를 제공합니다.

io 모듈은 약간 다른 인터페이스가 필요한 세 가지 유형의 스트림을 구분합니다. (그들은 데이터 형식의 측면에서 주로 차이가 있습니다.)

  1. 텍스트 I/O - 인터페이스 TextIOBase
  2. 바이너리 I/O - 인터페이스 BufferedIOBase
  3. 원시 I/O - 인터페이스 RawIOBase

예를 들어, StringIO는 TextIOBase의 메모리 내 구현입니다.

이러한 인터페이스는 파이썬 2와 3 모두에서 사용할 수 있습니다.

관련 문제