Это зависит от того, что вы подразумеваете под «более эффективным».Как указывал @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__
, и это может быть проблемой.