Словарь типов - PullRequest
       5

Словарь типов

2 голосов
/ 27 ноября 2011

Что в Python является более эффективным способом использования типов в качестве ключей словаря? Учитывая classObject, я должен использовать classObject.__name__ или непосредственно сам объект?

Ответы [ 2 ]

3 голосов
/ 27 ноября 2011

Поскольку имена типов не обязательно должны быть уникальными в разных модулях, вы должны использовать сам тип (classObject).

К счастью, типы будут автоматически иметь нетривиальное хеш-значение:

>>> class A(object): pass
>>> class B(object): pass
>>> hash(A)
2579460
>>> hash(B)
2579600
0 голосов
/ 27 ноября 2011

Это зависит от того, что вы подразумеваете под «более эффективным».Как указывал @phihag, сам объект класса хэширует так же, как и строку __name__, поэтому с этой точки зрения они являются одинаково хорошими словарными ключами.Где они могут отличаться, зависит от того, что вы хотите сделать с ключами.Например, если вы когда-нибудь захотите программно создать экземпляр класса, соответствующего одному из ваших словарных ключей, это довольно просто сделать:

class A(object): pass
mydict[A] = 'blah'

# ...

for t,v in mydict.iteritems():
    if v=='blah':
        o = t() # instantiate the class/key

Это было бы гораздо сложнее сделать, если бы ключи dict были __name__ строк, а не реальных объектов класса.

Редактировать: ну, немного сложнее.Вам нужно сделать что-то вроде:

o = globals()[t]()

Но, как упоминалось @phihag, для разных классов может быть одинаковое __name__, и это может быть проблемой.

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