Форум сайта python.su
Задача такая при создание объекта класса, ему должен присваиваться уникальный хеш-код состоящий из 10-15 знаков, нижний, верхний регистр и цифры.
А вот как исключить присвоение одинаковых хешей или как их исключить генерацию 2х одинаковых, разобраться не могу
class A() def __init__(self,name): self.name=name self.hash_code=A.random_code def random_code(self): random_string = '' for i in range(random.randint(10, 15)): random_string += random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) return random_string
Отредактировано vasyank (Ноя. 26, 2014 10:54:13)
Офлайн
id(object)
Return the “identity” of an object. This is an integer (or long integer) which is guaranteed to be unique and constant for this object during its lifetime. Two objects with non-overlapping lifetimes may have the same id() value.
CPython implementation detail: This is the address of the object in memory.
Отредактировано Shaman (Ноя. 26, 2014 08:01:28)
Офлайн
Shamanклассно конечно но если чесно не представляю как реализовать проверку? как сравнить ид обьекта с уже существующими ид?
id(object)
Офлайн
vasyankОчевидно
классно конечно но если чесно не представляю как реализовать проверку? как сравнить ид обьекта с уже существующими ид?
id(obj_a) == id(obj_b)
Офлайн
Допустим нам дается список имен, каждое имя списка мы определяем как обьект класса А, и присваеваем каждому хеш. Не совсем понимаю что с чем сравнивать,в рамках этого класса random_string и A.random_code?
Отредактировано vasyank (Ноя. 26, 2014 10:53:49)
Офлайн
Без проблем.
>>> a = object() >>> id(a) 19825848 >>> id(123) 19953032 >>> id(3.14) 30283096 >>> id('string') 20182816 >>> b = a >>> id(b) 19825848 >>> id(a) == id(b) True >>>
Отредактировано Shaman (Ноя. 26, 2014 11:16:24)
Офлайн
Дело в том что по условиям задачи хеш должен быть от 10 до 15 символов нижний рег+верхний рег.+ цифры. А как то обратиться ко всем имеющимся ид обьектов можно?
что то типо:
def random_code() ......................... if id(random_string) not in .....(все id): return random_string else : return A.random_code()
Отредактировано vasyank (Ноя. 26, 2014 11:29:28)
Офлайн
vasyankНагенерите из uuid-ов. Их туда, на глаз, как минимум два влезет.
Дело в том что по условиям задачи хеш должен быть от 10 до 15 символов нижний рег+верхний рег.+ цифры.
vasyankУсловие никогда не выполнится.
if id(random_string) not in …..(все id):
Офлайн
окей если вызывать
uuid.uuid4C заменой - на “” (потмоу как - выпадает из условия задачи), а вот как сделать что бы из этого выбирался срез от 10 до 15 символов
Офлайн
Почему именно uuid4?
vasyankА тут больше про математику чем про питон. Считайте идентификаторы числами, выраженными в произвольной системе исчисления.
как сделать что бы из этого выбирался срез от 10 до 15 символов
Офлайн