2017-09-21 2 views
1

여기 내 코드가 AttributeError를 던지고 있습니다. abc 변수에 액세스하여 인쇄하려면 어떻게해야합니까?외부에서 클래스 메소드 내부의 변수에 액세스하려면 어떻게해야합니까?

어떤 이유로 든 foo 클래스가 "ABC"을 반환하지 않게하려고합니다. 예, 할 수 있음을 알고 있지만 다른 해결책을 찾고 있습니다. 도와 주셔서 감사합니다.

class John: 
    def foo(self): 
     abc = "ABC" 

a = John() 
print(a.foo.abc) 

답변

1

당신은 클래스의 속성으로 클래스 John 내부의 변수를 정의해야합니다. 그래서 같이 : 당신은 클래스, a = John()의 인스턴스를 만들 때

__init__() 실행

class John: 
    def __init__(self): # You have to have this initialization method, which is called when you do 'John()' 
     self.foo() 
    def foo(self): 
     self.abc = "ABC" # Note the use of 'self.' 

a = John() 
print(a.abc) # abc is an attribute of 'John', no need to pass through 'foo' 

편집 할 수 있습니다. __init__() 안에는 클래스의 기능으로 수행 할 수있는 모든 작업을 수행 할 수 있습니다. 스폿에 속성을 만들거나 (속성 이름 앞에 self.을 사용) 함수 또는 클래스 메서드를 호출 할 수 있습니다.이 경우 foo 메뚜기, 및 자체를이라고합니다. 따라서,이 라인 :

a = John() 

하면, John 클래스의 인스턴스를 생성하는 a에 할당하고, 속성을 생성 John.abcJohn.foo()을 실행 John.__init__()을 실행.

+0

AttributeError : 'John'객체의 속성이 'abc' – JanaeUmae

+0

입니다. 대답을 수정하십시오. –

+0

감사합니다. – JanaeUmae

0

__init__ 기능을 찾고 있습니다.

class John: 
    def __init__(self): 
     self.abc = "ABC" 

a = John() 
print(a.abc) 

초기화 기능이 바로 그 클래스의 새 인스턴스를 만들라고한다. 따라서 John 클래스가 새 인스턴스 ("a")를 얻 자마자 변수 "abs"가 첨부됩니다.

변수를 self.abc으로 지정하고 외부에서 self을 인스턴스 이름으로 바꿀 수 있습니다.

관련 문제