Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с классами 
V
    Опции темы
HellanD
Дата 6.9.2006, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 16.5.2006
Где: Киев

Репутация: 1
Всего: 2



Подскажите если в обьект через конструктор подается переменная то для использования ее в другой функции данного класа необходимо использовать обращение self.varName???


--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
HellanD
Дата 6.9.2006, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 16.5.2006
Где: Киев

Репутация: 1
Всего: 2



почему если ввести такой код
Код

 def generate(self):
        #print '&'+self.argum
        self.Input,self.outWitErrors=os.popen4(self.argum)
        self.Out=self.outWitErrors.read()
        #print '2'+self.Out    
        self.InputSh,self.outWitErrorsSh=os.popen4(self.newArg)
        self.OutParam=self.outWitErrorsSh.read()
        self.generated=1 
    def showParams(self):
        if (self.generated==1 ):
              print '\nOutParam:\n'+self.OutParam
        else:
              print 'Sorry you have not generated params yet. Please try generate function first!'

Он пишет AttributeError: params instance has no attribute 'generated'


--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
J2A
Дата 6.9.2006, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 17.11.2005
Где: Омск

Репутация: 16
Всего: 18



Цитата(HellanD @ 6.9.2006,  15:21)
Подскажите если в обьект через конструктор подается переменная то для использования ее в другой функции данного класа необходимо использовать обращение self.varName???

Зависит от того, как ты оформил конструктор.

Если
Код

class Foo(object):
    def __init__(self, arg):
        # ... do something

то нет -- arg остается локальной переменной, определенной внутри метода __init__

Если ты делаешь так:
Код

class Foo(object):
    def __init__(self, arg):
        self.attr = arg
        # ... do something

То attr - это атрибут, и во всех методах он будет доступен как self.attr, а вне класса -- как obj_foo.attr

Еще можно сделать так:

Код

class Foo(object):
    attr='default value'
    def __init__(self):
        # ... do something

то несмотря на то, что в конструкторе ты не определяешь метода attr, он также доступне как и в предыдущем примере.

P.S. Если ты, конечно, под конструктором понимаешь __init__ а не __new__

Добавлено @ 13:18 
Цитата(HellanD @ 6.9.2006,  15:57)
почему если ввести такой код
...
Он пишет AttributeError: params instance has no attribute 'generated'

Приведи полный код класса. И это... не обязательно приводить класс as is, достаточно указать важные моменты. Например, в вышеприведенном коде абсолютно не важно, каким образом получают значение Input*, Output*, важно, что в этом месте присваивается self.generated.

P.S. Если я правильно понимаю, showParams - отдельный метод, а не внутренняя локальная функция метода generate. В этом случае, AttributeError будет, например, если showParams вызвана до вызова generate. Если после, то всё должно быть ОК (если, конечно, вызов метода generate заканчивается нормально, без вызова исключений).
--------------------
Be easy, stay cool
PM MAIL WWW Jabber   Вверх
HellanD
Дата 6.9.2006, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 16.5.2006
Где: Киев

Репутация: 1
Всего: 2



Код

class params:
 
    def __init__(self,CurvName,dke,outform):
       self.ParamFile="parm(%s).pem" %(CurvName)
       self.argum="string'%s" %(CurvName,self.ParamFile,dke,outform) 
       #print '1'+self.argum
       self.newArg='string'%(outform,self.ParamFile) 
       
    def setCurrDir(self,paths):
        os.chdir(paths)
    def generate(self):
        #print '&'+self.argum
        self.Input,self.outWitErrors=os.popen4(self.argum)
        self.Out=self.outWitErrors.read()
        #print '2'+self.Out    
        self.InputSh,self.outWitErrorsSh=os.popen4(self.newArg)
        self.OutParam=self.outWitErrorsSh.read()
        self.generated='1' 

    def showParams(self):
        if (self.generated=='1' ):
              print '\nOutParam:\n'+self.OutParam
        else:
              print 'Sorry you have not generated params yet. Please try generate function first!'
    def showStreams(self):
        print self.Out




--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
setq
Дата 6.9.2006, 14:17 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











HellanD, означает ли твой пост, что ты не разобрался?
  Вверх
HellanD
Дата 6.9.2006, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 16.5.2006
Где: Киев

Репутация: 1
Всего: 2



Да хелп
Че єта чавсть кода не работает??
Код

def showParams(self):
        if (self.generated=='1' ):
              print '\nOutParam:\n'+self.OutParam
        else:
              print 'Sorry you have not generated params yet. Please try generate function first!'




--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
J2A
Дата 6.9.2006, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 17.11.2005
Где: Омск

Репутация: 16
Всего: 18



Еще раз: если ты вызываешь showParams до того как вызываешь generate, то исключение AttributeError будет. По той простой причине, что атрибут generated ты определяешь только в generate. до вызова generate у тебя нет этого атрибута.

Поэтому, сделай паузу, минут 10 подумай...

добавь self.generated='0' в __init__

Это сообщение отредактировал(а) J2A - 6.9.2006, 14:52
--------------------
Be easy, stay cool
PM MAIL WWW Jabber   Вверх
HellanD
Дата 6.9.2006, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 16.5.2006
Где: Киев

Репутация: 1
Всего: 2



Цитата

Поэтому, сделай паузу, минут 10 подумай...

Странно конечно но помогло.... smile 


--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
Cr@$h
Дата 6.9.2006, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: 1
Всего: 41




M
Cr@$h
J2A, ++ за помощь новичку.

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0799 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.