2013-03-14 10 views
9

इस python doc page यह कहते हैं पर की:बदलते "प्रकार" अजगर वस्तुओं

अपनी पहचान की तरह

, एक वस्तु के प्रकार भी अपरिवर्तनीय है।

और मैं इस स्क्रिप्ट की कोशिश,

#!python3 

class Foo: 
    num = 1 
    pass 

class Bar: 
    num = 2 
    pass 

f1,f2= Foo(), Foo() 

f2.__class__ = Bar 
print(type(f1), type(f2), f1.num, f2.num) 

परिणाम दिखाता है:

<class '__main__.Foo'> <class '__main__.Bar'> 1 2

मुझे लगता है मैं f2 की type बदल दिया है।
क्या गलत है, मुझे क्या याद आ रही है?

+0

पर उपलब्ध हैं पाइथन को "वयस्क" के रूप में माना जाता है कि आप जानते हैं कि आप क्या कर रहे हैं और क्यों। सवाल यह होगा: "आप ऑब्जेक्ट प्रकार क्यों बदलना चाहेंगे?" – pepr

+1

जिज्ञासा से बाहर @pepr – adamsmith

+0

यह एक उचित कारण है। इसे विच्छेदन करने से आप आंतरिक को बेहतर समझ सकेंगे। :) – pepr

उत्तर

10

फ़ुटनोट एक है कि पेज का कहना है:

[1] यह कुछ मामलों में, एक वस्तु के प्रकार बदलने के लिए कुछ नियंत्रित परिस्थितियों में संभव है। यह आमतौर पर एक अच्छा विचार नहीं है, क्योंकि यह को गलत तरीके से संभाला जाने पर कुछ अजीब व्यवहार का कारण बन सकता है।

आप list लिए F2 की __class__ बदलने की कोशिश करते हैं:

f2.__class__ = list 

एक लेखन त्रुटि उठाया:

TypeError: __class__ assignment: only for heap types 
+0

ओह, उसने ध्यान नहीं दिया। तो मैंने टाइप बदल दिया। धन्यवाद :) – adamsmith

+0

@dlutxx: ऑब्जेक्ट मेमोरी लेआउट बदलने के लिए अब '__slots__' जोड़ने का प्रयास करें। इससे ढेर प्रकार भी असंगत हो सकते हैं। – eryksun

0

मैं आज एक सहयोगी द्वारा इस प्रश्न पूछा गया था। उनके पास एक अभिभावक वर्ग था जो अपने समय में स्वचालित रूप से अपने बच्चों में से एक होने के लिए खुद को बढ़ावा देना चाहता था।

class ClassB(object): 

    def __init__(self): 
     self.__class__ = ClassA 

    def blah2(self,t): 
     print('I give you',t) 
     return 'You are welcome' 

class ClassA(ClassB): 

    def blah(self, t): 
     print('you gave me',t) 
     return 'Thankyou' 



a = ClassB() 
print(type(a)) 
print(a.blah('sausage')) 
print(a.blah2('cabbage')) 

परिणाम दिखाता है:: निम्न स्क्रिप्ट अवधारणा के प्रमाण के रूप में काम किया तुम मुझे सॉसेज दिया ठनक मैं तुम्हें गोभी आपका स्वागत है देना

कौन सा है कि दोनों माता पिता एक बच्चे से पता चलता फ़ंक्शंस अब

संबंधित मुद्दे