2012-06-01 8 views
2

다른 클래스의 한 클래스에서 함수 내에서 선언 한 변수를 사용하고 싶습니다.다른 클래스 (파이썬)의 클래스 함수에서 변수 사용하기

예를 들어 다른 클래스에서 변수 "j"를 사용하고 싶습니다. 가능한가? (나는 어딘가에서 인스턴스 변수와 관련이있을 수 있지만 개념을 완전히 이해할 수는 없다는 것을 읽었다.)

class check1: 
    def helloworld(self): 
     j = 5 
+1

A '기능'(클래스 정의 내)이 문맥 작성된 '방법'으로 알려져있다. 파이썬에서 함수는 기본적으로 '인스턴스'메소드입니다. '인스턴스 메소드'의 첫 번째 매개 변수 (이 경우'self'는 항상 정의 된 클래스의 '인스턴스'입니다 (예 :'self'는'check1' 객체입니다). .j = 5',이 특정'self'에 대한 참조가있는 값으로 볼 수 있습니다. – Darthfett

+1

@Darthfett 대답으로 써야합니다. – zigg

답변

6
class check1: 
    def helloworld(self): 
     self.j = 5 

check_instance=check1() 
print (hasattr(check_instance,'j')) #False -- j hasn't been set on check_instance yet 
check_instance.helloworld()   #add j attribute to check_instance 
print(check_instance.j) #prints 5 

하지만 당신은 클래스 인스턴스에 새로운 속성을 할당하는 방법이 필요하지 않습니다 ...

이제
check_instance.k=6 #this works just fine. 

당신은 check_instance.j (또는 check_instance.k)를 사용할 수 있습니다 다른 변수를 사용하십시오.

check_instance.helloworld() 

은 완전히 동일하다 : (

check1.helloworld(check_instance) 

당신이 그것에 대해 생각한다면 조금, 즉 무엇을 설명하고 당신이 배울 때까지

이 5 월 마법 같은 조금 보인다 self 매개 변수는입니다.) 난 당신이 여기에 달성하려는 것을 완전히 확실하지 않다

- 클래스의 모든 인스턴스에 의해 공유되는 클래스 변수도 있습니다 ...

class Foo(object): 
    #define foolist at the class level 
    #(not at the instance level as self.foolist would be defined in a method) 
    foolist=[] 

A=Foo() 
B=Foo() 

A.foolist.append("bar") 
print (B.foolist) # ["bar"] 
print (A.foolist is B.foolist) #True -- A and B are sharing the same foolist variable. 
+2

나는 많은 노력을 기울이지 않았습니다. 이 질문에 대답합니다. 질문하는 사용자는 한 번 대답을 수락하지 않았거나 하나의 의견을 남기거나 질문을 게시 한 후 다른 활동을했습니다 ... 좋은 대답 – chown

+0

@chown : 아마도 맞을지라도 사용자는 아무런 활동도하지 않고 언제나 그 사람이 내 게시물을 읽음으로써 무언가를 배우기를 바랍니다. – mgilson

+0

@ 질문에서 언급하지 않은 사실은 내가 그것을 받아 들였다는 것을 의미합니다. 전에 두 가지 질문 (내가 아직도 혼란 스러울 때 그것에있는 ns). – afroze

0

j 다른 클래스에서는 보이지 않습니다. 그러나 나는 당신이 self.j을 의미한다고 생각합니다. 당신이 것처럼

class A(object): 
    def __init__(self, x): 
     self.x = x 

class B(object): 
    def __init__(self): 
     self.sum = 0 
    def addA(self, a): 
     self.sum += a.x 

a = A(4) 
b = B() 
b.addA(a) # b.sum = 4 
+0

감사합니다. (: – afroze

-3

매우이다 inheritane 클래스를 사용하여 쉽게를 "주"인스턴스 변수

예 :

class A: 
    def __init__(self): 
     self.a = 10 

    def retb(self): 
     return self.b 

class B(A): 
    def __init__(self): 
     A.__init__(self) 
     self.b = self.a 

o = B() 
print o.a 
print o.b 
print o.retb() 
+2

클래스에서 상속하면 인스턴스에 정의 된 변수를 공유 할 수 있습니까? – mgilson

+0

상속을 사용하여 서로 다른 인스턴스 변수를 공유하는 두 클래스의 예제를 추가했습니다. – voscausa

+0

Aa는 인스턴스 변수가 아닌 클래스 변수입니다. – mgilson

관련 문제