Найти - Пользователи
Полная версия: сменить свойства классов
Начало » Python для новичков » сменить свойства классов
1 2
ilnur
привет. есть такой код
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… т.е. экземпляров класса не известно.
pnk.andrian
У вас в коде c2.next = c3. И после этого вы хотите чтобы с2.next ссылался на c1?
ilnur
pnk.andrian
да.
есть один класс С. есть его экземпляры. причем атрибут next, каждого экземпляра класса, ссылается на следующий экземпляр.
мне надо сделать реверс, т.е. чтобы атрибут экземпляров классов, next, ссылался на предыдущий класс.

#было 
c2.next = c3
c3.next = c4
....
#стало
c3.next =c2
c4.next = c1
....
reclosedev
<телепат_моде>
- вам нужны не атрибуты класса а атрибуты экземпляра
- нужен дополнительный атрибут 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
</телепат_моде>
А вообще, непонятно чего хотите.
ilnur
я хочу то, чего хотят от меня.
:)

может я не правильно понял чего хотят от меня.
а казалось что понял.
ilnur
есть ли стандартные методы, которые возвращают экземпляры класса?
т.е. вот есть у меня класс С. как узнать сколько экзепляров создано, и как узнать эти экземпляры?
ilnur
А вообще, непонятно чего хотите.
есть односвязный список классов. в каждом классе есть ссылкаа на другой класс. мне надо развернуть данный односвязный список.
reclosedev
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
только тут не классы, а экземпляры.
ilnur
а вот что я натворил.
прокоментируйте пожалуйста
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 '---'
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB