2011-01-20 3 views
1

Почему я получаю объект AttributeError: 'NewOne' не имеет сообщения об ошибке «self.b», когда я пытаюсь получить доступ к атрибуту «self.b» из класса NewOne. Я имею в виду, что это правильно.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, а не getmeth или что-то еще? Благодаря

ответ

6

заменить это:

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

этим:

k = getattr(u, 'b') 

или даже лучше просто сделать:

k = u.b 
+1

+1: «еще лучше ...» –

+0

Спасибо, спасибо, спасибо! что произойдет, если атрибут и метод имеют одно и то же имя? – kassold

+0

Атрибут и метод не могут иметь одно и то же имя. Точнее, метод * является * атрибутом, только одним вызываемым. –

2

Youe должен написать

k = getattr(u, 'b') 

или лучше

k = u.b 

вместо.

Наименование атрибута b, а не self.b. И обычно вы получаете доступ к атрибутам через obj.attr - форма getattr() нужна только в том случае, если имя атрибута является динамическим (т. Е. Не известно в момент написания кода, но вычислено во время выполнения).

+0

«GetAttr() форма необходима только если имя из атрибут является динамическим. «Это освещает. Спасибо. – kassold

Смежные вопросы