2013-11-15 3 views
21

मैं एक प्रोग्राम लिख रहा हूं जो कई वर्गों का उपयोग कर रहा है। मेरे पास एक वर्ग है जो चर के सेट के लिए मान निर्धारित करने के लिए समर्पित है। मैं फिर उन वर्गों के मूल्यों को अन्य वर्गों के साथ एक्सेस करने में सक्षम होना चाहूंगा। मेरा कोड इस प्रकार दिखता है:मैं एक वर्ग से दूसरे वर्ग में चर का उपयोग कैसे करूं?

class ClassA(object): 
    def __init__(self): 
     self.var1 = 1 
     self.var2 = 2 

    def methodA(self): 
     self.var1 = self.var1 + self.var2 
     return self.var1 


class ClassB(ClassA): 
    def __init__(self): 
     self.var1 = ? 
     self.var2 = ? 

object1 = ClassA() 
sum = object1.methodA() 
print sum 

मैं 2 चर (var1 और var2) को आरंभ करने के लिए कक्षा ए का उपयोग करता हूं। मैं फिर उन्हें जोड़ने के लिए methodA का उपयोग करता हूं, परिणाम को var1 के रूप में सहेजता हूं (मुझे लगता है कि यह var1 = 3 और var2 = 2 बना देगा)। मैं क्या जानना चाहता हूं कि मेरे पास कक्षाबी कैसे होगा, फिर कक्षा से var1 और var2 के मान प्राप्त करने में सक्षम हो?

उत्तर

29

var1 और var2instance variables हैं। इसका मतलब है कि आप क्रम में ClassB को ClassA के कहने भेजने के लिए ClassB इसे उपयोग करने के लिए है, अर्थात्:

class ClassA(object): 
    def __init__(self): 
     self.var1 = 1 
     self.var2 = 2 

    def methodA(self): 
     self.var1 = self.var1 + self.var2 
     return self.var1 



class ClassB(ClassA): 
    def __init__(self, class_a): 
     self.var1 = class_a.var1 
     self.var2 = class_a.var2 

object1 = ClassA() 
sum = object1.methodA() 
object2 = ClassB(object1) 
print sum 

दूसरी ओर - आप class variables उपयोग करने के लिए, आप भेजे बिना var1 और var2 पहुंच पा रहे थे थे ऑब्जेक्ट 1 क्लासबी के पैरामीटर के रूप में।

class ClassA(object): 
    var1 = 0 
    var2 = 0 
    def __init__(self): 
     ClassA.var1 = 1 
     ClassA.var2 = 2 

    def methodA(self): 
     ClassA.var1 = ClassA.var1 + ClassA.var2 
     return ClassA.var1 



class ClassB(ClassA): 
    def __init__(self): 
     print ClassA.var1 
     print ClassA.var2 

object1 = ClassA() 
sum = object1.methodA() 
object2 = ClassB() 
print sum 

नोट, हालांकि, कक्षा वर्ग सभी वर्गों के सभी उदाहरणों के बीच साझा किए जाते हैं।

+0

ऐसा लगता है कि यह मेरे लिए काम करता है! मैं साथ खेलने के लिए जा रहा हूँ यह, लेकिन मुझे लगता है कि मैं इसे अब समझता हूं। बहुत बहुत धन्यवाद! – user2714543

5

क्या आप क्यों समझा सकते हैं आप यह करना चाहते हैं?

आप उदाहरण चर के साथ चारों ओर खेल रहे हैं/विशेषताओं जो (वे भी ClassA के लिए नहीं बंधे हुए हैं, लेकिन किसी विशेष उदाहरण ClassA की आपके द्वारा बनाए गए करने के लिए एक से दूसरे वर्ग से माइग्रेट नहीं करेंगे जब आप ClassA() लिखा)। यदि आप किसी अन्य में एक वर्ग इस शो को में परिवर्तन, आप कर सकते हैं उपयोग वर्ग चर करना चाहते हैं:

class ClassA(object): 
    var1 = 1 
    var2 = 2 
    @classmethod 
    def method(cls): 
     cls.var1 = cls.var1 + cls.var2 
     return cls.var1 

इस परिदृश्य में, ClassBClassA विरासत से पर मान लेने होंगे। इसके बाद आप एक उदाहरण ClassA().var1 (बशर्ते कि आप नहीं जोड़ा है एक उदाहरण विधि var1 जो विशेषता देखने में वर्ग चर से पहले सुलझा लिया जाएगा से ClassA.var1, ClassB.var1 या यहाँ तक कि के माध्यम से वर्ग चर का उपयोग कर सकते हैं।

मैं करना होगा इससे पहले कि मुझे पता चले कि यह वास्तव में अनुशंसा करता है कि यह वास्तव में अनुशंसा करेगा ...

+2

मैं इसे वास्तव में अभ्यास के लिए कर रहा हूं। मैं खुद को सिखाने की कोशिश कर रहा हूं, और क्लास के साथ काम करते समय ses यह एक सवाल था कि मेरे पास था। मैंने चारों ओर खोज की, और वास्तव में अन्य उत्तरों को समझ नहीं सका। मैंने यह पूछने के लिए एक शॉट दिया था। मुझे लगता है कि अब मुझे लटका है! धन्यवाद! – user2714543

1
class ClassA(object): 
    def __init__(self): 
     self.var1 = 1 
     self.var2 = 2 
    def method(self): 
     self.var1 = self.var1 + self.var2 
     return self.var1 

class ClassB(ClassA): 
    def __init__(self): 
     ClassA.__init__(self) 

object1 = ClassA() 
sum = object1.method() 
object2 = ClassB() 
print sum 
संबंधित मुद्दे