with_metaclass()
, यह आसान दोनों अजगर 2 के लिए कोड विकसित करने के लिए बनाने के लिए और 3
यह आप के लिए निर्दिष्ट मेटा वर्ग के साथ एक आधार वर्ग बनाता है एक उपयोगिता वर्ग कारखाने six
library द्वारा प्रदान समारोह है के साथ संगत पायथन का संस्करण आप कोड चला रहे हैं।
प्रलेखन से हवाला देते हुए:
आधार वर्ग आधार और metaclass metaclass साथ एक नया वर्ग बनाएँ। यह इस तरह वर्ग घोषणाओं में इस्तेमाल किया जा बनाया गया है:
अजगर 2:
class MyClass(object):
__metaclass__ = Meta
from six import with_metaclass
class Meta(type):
pass
class Base(object):
pass
class MyClass(with_metaclass(Meta, Base)):
pass
इसका कारण यह है वाक्य रचना एक metaclass अजगर 2 और 3 के बीच बदल संलग्न करने के लिए की जरूरत है
अजगर 3:
class MyClass(metaclass=Meta):
pass
with_metaclass()
फ़ंक्शन इस तथ्य का उपयोग करता है कि मेटाक्लास ए) उप-वर्गों द्वारा विरासत में मिला है, और बी) नए वर्गों को उत्पन्न करने के लिए मेटाक्लास का उपयोग किया जा सकता है; यह प्रभावी रूप से एक कारखाने के रूप में metaclass का उपयोग कर एक खाली वर्ग उत्पन्न करने के लिए एक नया आधार वर्ग बनाता है:
def with_metaclass(meta, *bases):
"""Create a base class with a metaclass."""
return meta("NewBase", bases, {})
NewBase
आधार वर्ग के metaclass meta
, दोनों अजगर 2 पर और 3 है
स्रोत
2013-08-29 14:34:19
बस छह में, सिंटैक्स (ऊपर पाइथन 2 और 3 के व्यवहार से मेल खाने के लिए) को स्पष्ट करने के लिए: 'क्लास माईक्लास (with_metaclass (मेटा, ऑब्जेक्ट)): पास' (जहां ऑब्जेक्ट वैकल्पिक है)। –