2012-03-31 4 views
0

Я хочу получить доступ к экземпляру var из класса за пределами __init__, но я застрял!Доступ к экземпляру экземпляра Python из этого класса

import sys 

class Borg(object): 
    __shared_state = {} 
    def __init__(self, nombre): 
     self.__dict__ = self.__shared_state 
     self.nombre = nombre 

     print 'my instance vr::', self.nombre 

     # panga = 'pangas' 

    panga = 'pangas' 


    print 'te copio con ' 


    print panga 

    #print self.nombre 


pingus = Borg('varString') 


print pingus.nombre 

Если я раскомментировать print self.nombre, я понимаю, что «self.nombre не признается»?

Как получить доступ к этому var?

+1

Ваших отступы как представляется, перепутались, потому что вы выполнение операторов печати внутри класса определение. (а также вдавливание 'import sys' тоже.) – alan

ответ

4

Это может сработать лучше. Вы должны инкапсулировать этот код в методе, как:

import sys 

class Borg(object): 
    __shared_state = {} 
    def __init__(self, nombre): 
     self.__dict__ = self.__shared_state 
     self.nombre = nombre 

    def instance_method_1(self): 
     print 'my instance vr::', self.nombre 
     panga = 'pangas' 
     print 'te copio con ' 
     print panga 
     print self.nombre 


pingus = Borg('varString') 


print pingus.nombre 
pingus.instance_method_1() 
1

У вас не может быть свободного кода в классе python. Вы можете получить доступ к self.nombre с помощью другого метода.

def foo(self): 
    print self.nombre 
+3

Ну, вы * можете * иметь свободно стоящий код в классе Python, но он будет выполняться, когда класс определен, а не когда он создается. На этом этапе 'self' не определен. – kindall

0

Когда вы звоните

print self.nombre 

Объект еще не построен (нет экземпляра Борга, когда оценивается, что заявление), так что не является ни самом, ни номбре. Если вы хотите получить доступ к Номбрам вам сначала нужно построить объект:

pingus = Borg("varString") 

, а затем Номбры доступа:

print pingus.nombre 
Смежные вопросы