मुझे लगा कि मैं आपको दिखाने के लिए कुछ समय लूंगा कि आप किसी वस्तु को किस तरह से लिख सकते हैं dict(obj)
।
class A(object):
d = '4'
e = '5'
f = '6'
def __init__(self):
self.a = '1'
self.b = '2'
self.c = '3'
def __iter__(self):
# first start by grabbing the Class items
iters = dict((x,y) for x,y in A.__dict__.items() if x[:2] != '__')
# then update the class items with the instance items
iters.update(self.__dict__)
# now 'yield' through the items
for x,y in iters.items():
yield x,y
a = A()
print(dict(a))
# prints "{'a': '1', 'c': '3', 'b': '2', 'e': '5', 'd': '4', 'f': '6'}"
इस कोड का प्रमुख भाग __iter__
फ़ंक्शन है।
जैसा कि टिप्पणियां बताती हैं, पहली चीज जो हम करते हैं वह है क्लास की वस्तुओं को पकड़ना और '__' से शुरू होने वाली किसी भी चीज को रोकना।
एक बार जब आप इसे बना लेते हैं dict
, तो आप update
कमांड का उपयोग कर सकते हैं और उदाहरण में पास कर सकते हैं __dict__
।
ये आपको सदस्यों का एक पूरा वर्ग + उदाहरण शब्दकोश देंगे। अब जो कुछ बचा है वह उन पर पुनरावृति करना है और रिटर्न प्राप्त करना है।
इसके अलावा, यदि आप इसे बहुत उपयोग करने की योजना बनाते हैं, तो आप एक @iterable
क्लास डेकोरेटर बना सकते हैं ।
def iterable(cls):
def iterfn(self):
iters = dict((x,y) for x,y in cls.__dict__.items() if x[:2] != '__')
iters.update(self.__dict__)
for x,y in iters.items():
yield x,y
cls.__iter__ = iterfn
return cls
@iterable
class B(object):
d = 'd'
e = 'e'
f = 'f'
def __init__(self):
self.a = 'a'
self.b = 'b'
self.c = 'c'
b = B()
print(dict(b))