Как Вы создаете возрастающий идентификатор в Классе Python

Предполагается, что вы не хотите размещать страницу на другом сервере и вставлять ее как IFrame на сайт WIX. Поэтому в WIX вы можете использовать только javascript как на стороне сервера, так и на стороне клиента.

23
задан eyllanesc 11 September 2017 в 02:02
поделиться

5 ответов

Знаете ли вы об идентификаторе функция в Python, и не могли бы вы использовать ее вместо своей контр-идеи?

class C(): pass

x = C()
y = C()
print(id(x), id(y))    #(4400352, 16982704)
8
ответ дан 29 November 2019 в 00:38
поделиться

Вы могли присоединить количество к классу как параметр класса, и затем на init Вы можете скопировать это значение в параметр экземпляра.

Это делает count параметрический усилитель класса, и id параметрический усилитель экземпляра. Это работает, потому что целые числа неизменны в Python, поэтому текущее значение копируется а не сам атрибут.

class Counter:
    count = 0

    @classmethod
    def incr(self):
        self.count += 1
        return self.count

    def __init__(self):
        self.id = self.incr()

assert [Counter().id for _ in range(3)] == [1, 2, 3]
0
ответ дан 29 November 2019 в 00:38
поделиться

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

class Resource( object ):
    class_counter= 0
    def __init__(self, name, position, type, active):
        self.name = name
        self.position = position
        self.type = type
        self.active = active
        self.id= Resource.class_counter
        Resource.class_counter += 1
19
ответ дан 29 November 2019 в 00:38
поделиться

Лаконично и элегантно:

import itertools

class resource_cl():
    newid = itertools.count().next
    def __init__(self):
        self.id = resource_cl.newid()
        ...
52
ответ дан 29 November 2019 в 00:38
поделиться

Использование count из itertools отлично подходит для этого:

>>> import itertools
>>> counter = itertools.count()
>>> a = next(counter)
>>> print a
0
>>> print next(counter)
1
>>> print next(counter)
2
>>> class A(object):
...   id_generator = itertools.count(100) # first generated is 100
...   def __init__(self):
...     self.id = next(self.id_generator)
>>> objs = [A(), A()]
>>> print objs[0].id, objs[1].id
100 101
>>> print next(counter) # each instance is independent
3

Тот же интерфейс работает, если позже вам потребуется изменить способ генерации значений, вы просто измените определение id_generator .

15
ответ дан 29 November 2019 в 00:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: