2013-11-15 6 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)를 초기화하려면 classA를 사용합니다. 그런 다음 methodA를 사용하여 결과를 var1로 저장합니다 (var1 = 3 및 var2 = 2로 만듭니다). 내가 알고 싶은 건 어떻게 ClassB가 var1과 var2의 값을 ClassA로부터 얻을 수 있을까요?

답변

29

var1var2instance variables입니다. 즉 ClassB가가 해당 기능에 액세스 할 수 있도록 당신이 순서대로 ClassBClassA의 인스턴스를 보낼 즉한다는 것을 의미 : 다른 한편으로

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 

- 당신이, 당신이 보내지 않고 VAR1 및 VAR2에 액세스 할 수 class variables를 사용한다면 Class1에 대한 매개 변수로 object1.

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 

ClassB 상속에서 ClassA에서 값을 선택합니다. 그런 다음 속성 조회에서 클래스 변수 전에 해결 될 것입니다 인스턴스 메서드 var1을 추가하지 않은 것을 제공하는 인스턴스 ClassA().var1 (에서 심지어 ClassA.var1, ClassB.var1 또는를 통해 클래스 변수에 액세스 할 수 있습니다.

내가해야 할 것 비록 내가 이것이 실제로 권장할만한 행동의 과정인지 알기도 전에 특정 유스 케이스에 대해 조금 더 알고 싶습니다. ...

+2

나는 연습을 위해 그것을하고 있습니다. 나는 스스로 가르치려고 노력하고 있으며, clas 이 질문은 내가 가진 질문이었습니다. 나는 주변을 수색하고, 다른 대답을 정말로 이해할 수 없었다. 내가 그것을 물어볼 기회를 줄 것이라고 생각했다. 나는 그것이 지금 그것에 매달린다라고 생각한다! 고맙습니다! – 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 
관련 문제