Как создать уникальный и инкрементный идентификатор в классе Python - PullRequest
1 голос
/ 25 сентября 2019

У меня есть следующие классы Python:

class Coordinates:
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z

class Properties:
    def __init__(self, w, h, d):
        self.w = w
        self.h = h
        self.d = d

class Objects(Properties, Coordinates):
    def __init__(self, x, y, z, w, h, d):
        Coordinates.__init__(self, x, y, z)
        Properties.__init__(self, w, h, d)

Я хотел бы иметь добавочный уникальный идентификатор класса Objects при каждом вызове класса в основном.Этот идентификатор должен генерироваться автоматически при создании экземпляра класса.

Я думал использовать функцию id(), но это только при создании объекта.

a = Objects(1, 2, 3, 4, 5, 6)
b = Objects(1, 2, 3, 4, 5, 6)
print (id(a),id(b)) #(2400452, 24982704)

Ответы [ 2 ]

2 голосов
/ 25 сентября 2019

Используйте следующее:

import itertools

class Objects(Properties, Coordinates):
    id_iter = itertools.count()

    def __init__(self, x, y, z, w, h, d):
        Coordinates.__init__(self, x, y, z)
        Properties.__init__(self, w, h, d)
        self.id = next(Objects.id_iter)

Запущенная программа:

>> a = Objects(1, 2, 3, 4, 5, 6)
>>> b = Objects(1, 2, 3, 4, 5, 6)
>>> print (a.id, b.id) # the id will depend upon the number of objects already created
0 1
0 голосов
/ 25 сентября 2019

Вы можете сделать это без каких-либо дополнительных пакетов.Это называется атрибутом класса:

class MyClass(object):
    counter = 0

    def __init__(self):
        # other commands here

        # update id
        self.id = MyClass.counter
        MyClass.counter += 1

a,b = MyClass(), MyClass()

print(a.id, b.id)

# 0 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...