serialize
메서드가있는 사용자 정의 클래스가 있고이 클래스를 파일에 직접 작성하고 serialize
메서드의 반환 값을 파이썬 2.6에서 작성하려고합니다. (I, 이것은 완전히 다른 뭔가가 내 개체를 pickle 위해 노력하고 있지 않다.) 예를 들면 :어떤 방법으로 파이썬에서 버퍼 인터페이스를 구현합니까?
class Foo(object):
def serialize(self):
return "Hello World!"
__str__ = serialize
foo = Foo()
f = open("foo.dat", "wb")
f.write(foo)
그러나, 나는 다음과 같은 예외가
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: argument 1 must be convertible to a buffer, not Foo
좋아요 수, 그래서 buffer
인터페이스를 구현하려면 내 Foo
클래스가 필요합니다. 심지어는 the buffer documentation에 "버퍼 인터페이스의 예제 사용자는 파일 객체의 write() 메소드입니다. 버퍼 인터페이스를 통해 일련의 바이트를 내보낼 수있는 객체는 파일에 쓸 수 있습니다."
분명히 내가 원하는대로 할 수는 있지만 문서는 실제로 버퍼 인터페이스를 구현하기 위해 구현해야하는 메서드를 말하지 않습니다. 나는 __str__
, __unicode__
, __len__
및 심지어 __sizeof__
을 구현하려고 시도했습니다. __getitem__
, __setitem__
및 __delitem__
을 구현했으며 int
및 slice
인수를 모두 허용했습니다. 심지어 안전을 위해 더 이상 사용되지 않는 __getslice__
, __setslice__
및 __delslice__
메서드를 구현하려고 시도했습니다. 내가 뭘하려고해도, 나는 여전히 똑같은 예외를 얻는다.
>>> dir(buffer)
['__add__', '__class__', '__cmp__', '__delattr__', '__delitem__', '__delslice__',
'__doc__', '__format__', '__getattribute__', '__getitem__', '__getslice__',
'__hash__', '__init__', '__len__', '__mul__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__setitem__',
'__setslice__', '__sizeof__', '__str__', '__subclasshook__']
내가 하나 하나 모두를 구현하지 않도록하고 싶습니다, 그리고 특히 정확히에 대한 문서를 찾으려면 :
는 참고로, 여기에 buffer
내장 클래스의 방법입니다 어떤 방법이 필요한가?
C 확장 클래스에서만 구현할 수있는 기능입니까? 또는 나는 명백한 것을 놓치고 있는가?
을 사용해야 될 것 같아요 아아, 이걸 확인해 줘서 고마워, 네가 파이썬에서 버퍼 인터페이스를 구현할 수 없다고 명시 적으로 말한 것을 찾지 못했다. –