मेरे पास एक विधि है एक विधि के साथ कक्षा वर्ग है। तब मेरे पास एक विधि बार() है जो एक Foo ऑब्जेक्ट प्राप्त करता है और जिसका व्यवहार इस पर निर्भर करता है कि यह मान्य है या नहीं।सबसे सामान्य पायथन प्रकार क्या है जिसमें मैं गुण जोड़ सकता हूं?
इसका परीक्षण करने के लिए, मैं कुछ ऑब्जेक्ट को बार में पास करना चाहता था जिसका वैध तरीका हमेशा गलत होता है। अन्य कारणों से, मैं परीक्षण के समय Foo का ऑब्जेक्ट नहीं बना सकता, इसलिए मुझे इसे ऑब्जेक्ट की नकली करने की आवश्यकता थी। जो मैंने पहली बार सोचा था वह सबसे सामान्य वस्तु बना रहा था और इसे जोड़ने के लिए विशेषता को जोड़ना है, इसे फू के रूप में उपयोग करने के लिए। लेकिन उस काफी काम नहीं किया:
>>> foo = object()
>>> foo.isValid = lambda : False
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute 'isValid'
मैं वस्तु को पता चला एक __dict__
नहीं है, तो आप इसे करने के लिए गुण नहीं जोड़ सकते। इस बिंदु पर, वैकल्पिक हल मैं उपयोग कर रहा हूँ इस उद्देश्य के लिए तुरंत एक प्रकार पैदा कर रही है और फिर उस प्रकार का ऑब्जेक्ट बनाने:
>>> tmptype = type('tmptype',(), {'isValid' : lambda self : False})
>>> x = tmptype()
>>> x.isValid()
False
लेकिन यह भी एक शॉट लंबा लगता है। कुछ आसानी से उपलब्ध सामान्य प्रकार होना चाहिए जो मैं इस उद्देश्य के लिए उपयोग कर सकता हूं, लेकिन कौन सा?
ठीक है, यह मूल रूप से वही चीज़ है जो इसके बजाय और अधिक नई शैली कक्षा में फैली हुई है। लेकिन मेरा सवाल अभी भी जारी है: क्या एक ही उद्देश्य प्राप्त करने के लिए कुछ सामान्य आसानी से उपलब्ध प्रकार नहीं है? __dict__ के साथ ऑब्जेक्ट की तरह कुछ? क्या मुझे वास्तव में इसके लिए एक प्रकार बनाने की ज़रूरत है? – ricab
@ricab: इस विचार को अस्वीकार कर दिया गया है कि मैंने अभी Google को खींचा है। आप दूसरों को ढूंढने में सक्षम हो सकते हैं। http://mail.python.org/pipermail/python-bugs-list/2007- जनवरी 0636866.html – aaronasterling
ओह, ठीक है, तो ऐसा कोई प्रकार नहीं है। हालांकि मैं शायद इसे अभी याद कर रहा था ... धन्यवाद – ricab