python
2011-01-20 8 views 1 likes 
1

NewOne 클래스에서 'self.b'속성에 액세스하려고하면 "AttributeError : 'NewOne'객체에 'self.b'속성이 없습니다."라는 오류 메시지가 나타나는 이유는 무엇입니까? 나는 그것이 바로 거기에 있다는 것을 의미합니다.python OOP, 액세스 속성

class NewOne(object): 
    def __init__(self): 
     self.b = 'Cat' # this is what i want to access 
    def child(self): 
     self.c = 'kitten' 
     return self.c 

class FatherClass(object): 
    def __init__(self, a): 
     self.a = a 
    def son(self): 
     self.i = 'I and my father' 
     return self.i 
    def father(self): 
     self.x = 'are one' 
     return self.x 
    def father_son(self): 
     u = NewOne() 
     k = getattr(u, 'self.b') #why does it tell me NewOne has no self.b attr 
     return self.a, k() 

는 메소드에 액세스하는 데 사용 getattr 아닌가요? getattr이라고 불리는 이유는 무엇입니까? Youe이

k = getattr(u, 'b') 

이상

k = u.b 

대신 작성해야 감사

답변

6

이 대체 :

k = getattr(u, 'self.b') 

를이 기준 :

k = getattr(u, 'b') 

또는 더 나은 바로 수행의 이름 경우

k = u.b 
+1

+1 : "더 좋게 ..." –

+0

감사합니다. 고마워요, 고마워요! 속성과 메소드의 이름이 같은 경우 어떻게됩니까? – kassold

+0

속성과 메소드는 같은 이름을 가질 수 없습니다. 보다 정확하게는, 메소드 *는 속성이며, 호출 가능한 메소드입니다. –

2

.

속성의 이름은 이 아니고 self.b이 아닙니다. 그리고 일반적으로 obj.attr을 통해 속성에 액세스합니다. getattr() 양식은 속성 이름이 동적 인 경우에만 필요합니다 (즉, 코드 작성시에는 알 수 없지만 런타임에 계산 됨).

+0

"는 getattr() 형태에만 필요 속성은 동적입니다. "그것은 밝게 빛납니다. 고맙습니다. – kassold

관련 문제