Уведомления

Группа в Telegram: @pythonsu

#1 Март 12, 2013 16:43:57

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

сменить свойства классов

привет. есть такой код

class c:
    value = None
    next = None
c1=c()
c2=c()
c3=c()
...
c1.next = c2
c2.next = c3
...

как сделать так, чтобы c3.next ссылался на c2, c2.next ссылался на c1.
количество c1,c2,c3… т.е. экземпляров класса не известно.

Офлайн

#2 Март 12, 2013 17:23:14

pnk.andrian
От:
Зарегистрирован: 2011-01-30
Сообщения: 6
Репутация: +  1  -
Профиль   Отправить e-mail  

сменить свойства классов

У вас в коде c2.next = c3. И после этого вы хотите чтобы с2.next ссылался на c1?



Офлайн

#3 Март 12, 2013 17:29:05

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

сменить свойства классов

pnk.andrian
да.
есть один класс С. есть его экземпляры. причем атрибут next, каждого экземпляра класса, ссылается на следующий экземпляр.
мне надо сделать реверс, т.е. чтобы атрибут экземпляров классов, next, ссылался на предыдущий класс.

#было 
c2.next = c3
c3.next = c4
....
#стало
c3.next =c2
c4.next = c1
....

Отредактировано ilnur (Март 12, 2013 17:29:26)

Офлайн

#4 Март 12, 2013 18:13:19

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

сменить свойства классов

<телепат_моде>
- вам нужны не атрибуты класса а атрибуты экземпляра
- нужен дополнительный атрибут prev

class C:
    def __init__(self, value=None, prev=None, next=None):
        self.prev = prev
        self.next = next
        self.value = value
 
first = last = C(0)
for i in range(1, 10):
    c = C(i, last)
    last.next = c
    last = c
 
c = first
while c is not None:
    print c.value
    c = c.next
http://en.wikipedia.org/wiki/Doubly_linked_list
</телепат_моде>
А вообще, непонятно чего хотите.

Отредактировано reclosedev (Март 12, 2013 18:15:12)

Офлайн

#5 Март 12, 2013 18:15:44

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

сменить свойства классов

я хочу то, чего хотят от меня.
:)

может я не правильно понял чего хотят от меня.
а казалось что понял.

Офлайн

#6 Март 12, 2013 18:20:25

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

сменить свойства классов

есть ли стандартные методы, которые возвращают экземпляры класса?
т.е. вот есть у меня класс С. как узнать сколько экзепляров создано, и как узнать эти экземпляры?

Офлайн

#7 Март 12, 2013 18:34:01

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Офлайн

#8 Март 12, 2013 19:59:27

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

сменить свойства классов

А вообще, непонятно чего хотите.
есть односвязный список классов. в каждом классе есть ссылкаа на другой класс. мне надо развернуть данный односвязный список.

Отредактировано ilnur (Март 12, 2013 20:06:14)

Офлайн

#9 Март 12, 2013 20:47:22

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

сменить свойства классов

ilnur
мне надо развернуть данный односвязный список.
# -*- coding: utf-8 -*-
class C:
    def __init__(self, value=None, next=None):
        self.next = next
        self.value = value
 
# вот оно
def reverse(node):
    new_root = None
    while node:
        next_node, node.next = node.next, new_root
        new_root, node = node, next_node
    return new_root
 
first = last = C(0)
for i in range(1, 10):
    c = C(i)
    last.next = last = c
 
first = reverse(first)
  
n = first
while n:
    print n.value
    n = n.next
только тут не классы, а экземпляры.

Отредактировано reclosedev (Март 12, 2013 20:48:45)

Офлайн

#10 Март 12, 2013 20:52:14

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

сменить свойства классов

а вот что я натворил.
прокоментируйте пожалуйста

class c:
    value = None
    next = None
c1 = c()
c2 = c()
c3 = c()
c4 = c()
c1.value = 'class c1'
c1.next = c2
c2.value = 'class c2'
c2.next = c3
c3.value = 'class c3'
c3.next = c4
c4.value = 'class c4'
c4.next = None
classes = (c1, c2, c3, c4)
print 'after'
for i in classes:
    print i.value
    try:
        print i.next.value
    except AttributeError:
        print None
    except:
        print 'error'
    print '---'
print '***************'
print 'before'
classes_nexts = [i.next for i in classes]
classes_nexts.pop()
classes_nexts.pop()
classes_nexts.insert(0, c1)
classes_nexts.insert(0, None)
for n, i in enumerate(classes):
    i.next = classes_nexts[n]
    
for i in classes:
    print i.value
    try:
        print i.next.value
    except AttributeError:
        print None
    except:
        print 'error'
    print '---'

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version