Привет всем кого подвигло работать в выходной
У меня тут система которая генерирует до черта экземпляров одного класса (пока десятки, но возможно и на порядки больше) они затем выстраиваются в иерархию, а для этого должны обмениваться сообщениями. Для этого каждый должен знать свое имя, которое вырабатывается автоматически – " тфьу… то есть конечно “name” + str(i)
В принципе я могу сгенерировать засылку в экземпляр его идентификатора, таким же способом, но хочется что бы он изнутри узнавал свое имя из __init__ self.__class___.__name___ выдает название самого класса, а не текущего экземпляра. Поиск простым перебором по разным __getattr__ угробил выходной.
Здравствуйте, sergesokolov, Вы писали:
S>Привет всем кого подвигло работать в выходной S>У меня тут система которая генерирует до черта экземпляров одного класса (пока десятки, но возможно и на порядки больше) они затем выстраиваются в иерархию, а для этого должны обмениваться сообщениями. Для этого каждый должен знать свое имя, которое вырабатывается автоматически – " тфьу… то есть конечно “name” + str(i) S>В принципе я могу сгенерировать засылку в экземпляр его идентификатора, таким же способом, но хочется что бы он изнутри узнавал свое имя из __init__ self.__class___.__name___ выдает название самого класса, а не текущего экземпляра. Поиск простым перебором по разным __getattr__ угробил выходной.
глобальная переменная?. параметр в конструктор?. почему не?.
Здравствуйте, neFormal, Вы писали:
F>Здравствуйте, sergesokolov, Вы писали:
S>>Привет всем кого подвигло работать в выходной S>>У меня тут система которая генерирует до черта экземпляров одного класса (пока десятки, но возможно и на порядки больше) они затем выстраиваются в иерархию, а для этого должны обмениваться сообщениями. Для этого каждый должен знать свое имя, которое вырабатывается автоматически – " тфьу… то есть конечно “name” + str(i) S>>В принципе я могу сгенерировать засылку в экземпляр его идентификатора, таким же способом, но хочется что бы он изнутри узнавал свое имя из __init__ self.__class___.__name___ выдает название самого класса, а не текущего экземпляра. Поиск простым перебором по разным __getattr__ угробил выходной.
F>глобальная переменная?. параметр в конструктор?. почему не?.
Как говорил вини — пух и то и другое, но скромность заставляет пока параметр в собственный конструктор.
Здравствуйте, sergesokolov, Вы писали:
S>>>У меня тут система которая генерирует до черта экземпляров одного класса (пока десятки, но возможно и на порядки больше) они затем выстраиваются в иерархию, а для этого должны обмениваться сообщениями. Для этого каждый должен знать свое имя, которое вырабатывается автоматически – " тфьу… то есть конечно “name” + str(i) S>>>В принципе я могу сгенерировать засылку в экземпляр его идентификатора, таким же способом, но хочется что бы он изнутри узнавал свое имя из __init__ self.__class___.__name___ выдает название самого класса, а не текущего экземпляра. Поиск простым перебором по разным __getattr__ угробил выходной. F>>глобальная переменная?. параметр в конструктор?. почему не?. S>Как говорил вини — пух и то и другое, но скромность заставляет пока параметр в собственный конструктор.
а в чём суть вопроса?.
типа "какие ещё есть варианты" ?.
Здравствуйте, sergesokolov, Вы писали:
S>Привет всем кого подвигло работать в выходной :) S>У меня тут система которая генерирует до черта экземпляров одного класса (пока десятки, но возможно и на порядки больше) они затем выстраиваются в иерархию, а для этого должны обмениваться сообщениями. Для этого каждый должен знать свое имя, которое вырабатывается автоматически – " тфьу… то есть конечно “name” + str(i)
А откуда взялось i?
И что такое "имя" в данном случае?
S>В принципе я могу сгенерировать засылку в экземпляр его идентификатора, таким же способом, но хочется что бы он изнутри узнавал свое имя из __init__ :) self.__class___.__name___ выдает название самого класса, а не текущего экземпляра. Поиск простым перебором по разным __getattr__ угробил выходной.
Что-то тут сильно напутано. Требуется уникальное "имя"? Встречный вопрос — насколько оно уникально? В частности, допускается ли существование одноимённых экземпляров в _разное_ время (первый завершился, затем второй начался)? Если допускается — в качестве имени достаточно использовать id(self), или прибавить его к чему-то. Если второе — нужен последовательный номер, увеличивающийся при работе приложения с каждым экземпляром.
Здравствуйте, neFormal, Вы писали:
F>Здравствуйте, sergesokolov, Вы писали:
S>>>>У меня тут система которая генерирует до черта экземпляров одного класса (пока десятки, но возможно и на порядки больше) они затем выстраиваются в иерархию, а для этого должны обмениваться сообщениями. Для этого каждый должен знать свое имя, которое вырабатывается автоматически – " тфьу… то есть конечно “name” + str(i) S>>>>В принципе я могу сгенерировать засылку в экземпляр его идентификатора, таким же способом, но хочется что бы он изнутри узнавал свое имя из __init__ self.__class___.__name___ выдает название самого класса, а не текущего экземпляра. Поиск простым перебором по разным __getattr__ угробил выходной. F>>>глобальная переменная?. параметр в конструктор?. почему не?. S>>Как говорил вини — пух и то и другое, но скромность заставляет пока параметр в собственный конструктор.
F>а в чём суть вопроса?. F>типа "какие ещё есть варианты" ?.
экземпляру надо знать как он называется в формате string, что бы отправлять эти данные. Там связь с снсорнной матрицей, и обмениваясь с ней данными эксемпляр образует свой статус.
Здравствуйте, sergesokolov, Вы писали:
S>Привет всем кого подвигло работать в выходной S>У меня тут система которая генерирует до черта экземпляров одного класса (пока десятки, но возможно и на порядки больше) они затем выстраиваются в иерархию, а для этого должны обмениваться сообщениями. Для этого каждый должен знать свое имя, которое вырабатывается автоматически – " тфьу… то есть конечно “name” + str(i) S>В принципе я могу сгенерировать засылку в экземпляр его идентификатора, таким же способом, но хочется что бы он изнутри узнавал свое имя из __init__ self.__class___.__name___ выдает название самого класса, а не текущего экземпляра. Поиск простым перебором по разным __getattr__ угробил выходной.
на момент выполнения __init__, создаваемый экземпляр еще не "привязан" к какому либо имени, поэтому "узнать свое имя из __init__" вряд ли удасться, AFAIK. Но если очень хочется, то можно выдрать нужную инфу из GC в любом другом методе класса (держа в уме, что у объекта может быть и несколько "имен", причем в разных областях видимости, т.е. возможно и недоступных на момент вызова этого метода):
import sys, gc
class TestClass1:
def getNames(self):
frame = sys._getframe()
for frame in iter(lambda: frame.f_back, None):
frame.f_locals
result = []
for referrer in gc.get_referrers(self):
if isinstance(referrer, dict):
for k, v in referrer.iteritems():
if v is self:
result.append(k)
return result
def __init__(self):
print self.getNames() #не фига не выведет (точнее выведет "['self']", т.к. другие идентификаторы, ссылающиеся на текущий экземпляр, в этот момент отсутствуют)
testInstance1 = TestClass1()
testInstance3 = testInstance1
testInstance2 = TestClass1()
print testInstance1.getNames() #выведет "['testInstance3', 'testInstance1']"print testInstance2.getNames() #выведет "['testInstance2']"
короче, проще и надежнее передавать экземпляру какой-нибудь идшник явным образом
Здравствуйте, netch80, Вы писали:
N>Здравствуйте, sergesokolov, Вы писали:
S>>Привет всем кого подвигло работать в выходной S>>У меня тут система которая генерирует до черта экземпляров одного класса (пока десятки, но возможно и на порядки больше) они затем выстраиваются в иерархию, а для этого должны обмениваться сообщениями. Для этого каждый должен знать свое имя, которое вырабатывается автоматически – " тфьу… то есть конечно “name” + str(i)
N>А откуда взялось i?
for i in range(0, количество экземпляров) N>И что такое "имя" в данном случае?
я же не могу образовывать имя из одного числа.
S>>В принципе я могу сгенерировать засылку в экземпляр его идентификатора, таким же способом, но хочется что бы он изнутри узнавал свое имя из __init__ self.__class___.__name___ выдает название самого класса, а не текущего экземпляра. Поиск простым перебором по разным __getattr__ угробил выходной.
N>Что-то тут сильно напутано. Требуется уникальное "имя"? Встречный вопрос — насколько оно уникально? В частности, допускается ли существование одноимённых экземпляров в _разное_ время (первый завершился, затем второй начался)? Если допускается — в качестве имени достаточно использовать id(self), или прибавить его к чему-то. Если второе — нужен последовательный номер, увеличивающийся при работе приложения с каждым экземпляром.
Имя уникально потому, что образуется из каких-то первых букв названия и порядкового номера. Завершения одного с началом работы другого пожалуй не нужно, но будет частичная блокировка. Доминорование одних над другими в случе удачи первых и неудач вторых — это и строит иерархию.
N>То есть, первый подход даст код вроде следующего:
N>
Ну примерно как и я пробовал... N>Если требуется уникальность между разными процессами, локальное число заменяется на UUID (он же Гога, он же Гоша, он же GUID).