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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Указатели в питоне 
:(
    Опции темы
tofreesky
Дата 28.7.2013, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 9.6.2010

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



Код

ListOfObjects = []

for x in xrange(5):
    cObject = fnc('')
    cObject.ListOfSmt.append(1)

    ListOfObjects.append(cObject)


Почему при каждой итерации заполняется ListOfSmt лишь первого объекта, ведь тут же я использую указатель на каждый новый объект, так что в каждом объекте должен быть уникальный одинарный список из одного элемента? Но это не так.

Это сообщение отредактировал(а) tofreesky - 18.8.2013, 15:07
PM MAIL   Вверх
tofreesky
Дата 31.7.2013, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 9.6.2010

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



Что никто не знает?
PM MAIL   Вверх
tofreesky
Дата 1.8.2013, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 9.6.2010

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



up
PM MAIL   Вверх
SenkraD
Дата 2.8.2013, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 23



а можно пояснить что вы хотите? также было б неплохо сделать минимально-рабочий пример кода, а то я по вашему коду ничего понять не могу


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
tishaishii
Дата 7.8.2013, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



А что такое "fnc('')"?
PM MAIL ICQ Skype   Вверх
Bodyan
Дата 7.8.2013, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.8.2013

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



Цитата(tofreesky @ 28.7.2013,  20:15)
Код

ListOfObjects = []

for x in xrange(5):
    cObject = fnc('')
    cObjecct.ListOfSmt.append(1)

    ListOfObjects.append(cObject)


Почему при каждой итерации заполняется ListOfSmt лишь первого объекта, ведь тут же я использую указатель на каждый новый объект, так что в каждом объекте должен быть уникальный одинарный список из одного элемента? Но это не так.

Потому, что Вы указали заполнять только первый [].
PM MAIL WWW   Вверх
SenkraD
Дата 8.8.2013, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 23



да не, там просто код бредовый или не полный так, как в 4-й и 5-й строчках он работает с разными обьектами. если сделать код вменяемым (применив немного телепатии), то все работае как, наверное,  и ожидалось:
Код

import sys

class Object:
    def __init__(self, name):
        self.name = name
        self.listOfSomething = []
        
    def __repr__(self):
        return "{name=%s, list=%s}\\r\n" % (self.name, str(self.listOfSomething))

def createObject(name):
    return Object(name)

if __name__ == "__main__":
    listOfObjects = []
    
    for objectId in xrange(5):
        testObject = createObject("test-object-" + str(objectId))
        testObject.listOfSomething.append(objectId)
        
        listOfObjects.append(testObject)
    
    print listOfObjects
    sys.exit(0)

То будет видно что заполняются списки у всех обьектов
Код
[{name=test-object-0, list=[0]}
, {name=test-object-1, list=[1]}
, {name=test-object-2, list=[2]}
, {name=test-object-3, list=[3]}
, {name=test-object-4, list=[4]}
]

Если добавить еще телепатии и убрать опечатку в форе, то там наверное косяк в реализации класса


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
tofreesky
Дата 16.8.2013, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 9.6.2010

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



Цитата

как в 4-й и 5-й строчках он работает с разными обьектами.


Почему с разными? На 4 строке создал новый объект, на 5 использую его же, а получается что используется всегда самый первый созданный объект, почему?
PM MAIL   Вверх
SenkraD
Дата 18.8.2013, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 23



Цитата(tofreesky @  16.8.2013,  23:27 Найти цитируемый пост)
Почему с разными? На 4 строке создал новый объект, на 5 использую его же, а получается что используется всегда самый первый созданный объект, почему?
cObject и cObjecct - это одно и тоже? две буквы 'c' в названии переменной в пятой строчке не смущают?



--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
tofreesky
Дата 18.8.2013, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 9.6.2010

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



Цитата(SenkraD @ 18.8.2013,  14:53)
Цитата(tofreesky @  16.8.2013,  23:27 Найти цитируемый пост)
Почему с разными? На 4 строке создал новый объект, на 5 использую его же, а получается что используется всегда самый первый созданный объект, почему?
cObject и cObjecct - это одно и тоже? две буквы 'c' в названии переменной в пятой строчке не смущают?

Это опечатка, дело не в этом.

Добавлено через 3 минуты и 32 секунды
Код

class fnc(object):
    def __init__(self, name):
        self.FunctionName = name
    ListOfSmt = []

ListOfObjects = []
for x in xrange(5):
    cObject = fnc('')
    cObject.ListOfSmt.append(1)
    ListOfObjects.append(cObject)

for x in xrange(5):
    print id(ListOfObjects[x].ListOfSmt)

exit()


Вывод:

Код

46243528
46243528
46243528
46243528
46243528

PM MAIL   Вверх
vvms
Дата 19.8.2013, 03:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.10.2008

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



Код

class fnc(object):
    def __init__(self, name):
        self.FunctionName = name
    ListOfSmt = []


И правильно оно тут выводит. В данном случае ListOfSmt - это class-member, а не object-member. Другими словами, все экземпляры класса обращаются к одному и тому же ListOfSmt. Надо правильно его инициализировать через self, чтобы у каждого объекта был свой список.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




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


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

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