मेरे पास serialize
विधि के साथ एक कस्टम क्लास है, और मैं इस कक्षा को सीधे फाइलों में लिखने में सक्षम होना चाहता हूं और serialize
विधि का वापसी मान पाइथन 2.6 में लिखा गया है। (मैं, यह कुछ पूरी तरह से अलग है मेरी वस्तुओं 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 में भी देखता हूं कि यह कहता है: "बफर इंटरफ़ेस का एक उदाहरण उपयोगकर्ता फ़ाइल ऑब्जेक्ट की लेखन() विधि है। बफर इंटरफ़ेस के माध्यम से बाइट्स की श्रृंखला निर्यात करने वाली कोई भी ऑब्जेक्ट फ़ाइल में लिखी जा सकती है।"
तो स्पष्ट रूप से मैं जो कर सकता हूं वह कर सकता हूं, लेकिन दस्तावेज़ वास्तव में यह नहीं कहता कि बफर इंटरफेस को लागू करने के लिए मुझे कौन से तरीकों को लागू करने की आवश्यकता है। मैंने __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
builtin वर्ग के तरीके हैं कौन सी विधियां जरूरी हैं।
क्या यह ऐसा कुछ है जिसे केवल सी एक्सटेंशन कक्षाओं में लागू किया जा सकता है? या क्या मुझे कुछ याद आ रही है?
का उपयोग करना होगा हूँ हां, इसकी पुष्टि करने के लिए धन्यवाद, मुझे अपने आप कुछ भी नहीं मिला जो स्पष्ट रूप से कहा गया कि आप पाइथन में बफर इंटरफ़ेस को लागू नहीं कर सकते हैं। –