2016-11-09 9 views
0

Я знаю, что ключи словаря должны быть строками или неизменяемыми объектами. Но я не хочу передавать строки в качестве ключа. Причина в том, что каждый, где я использую словарь, я должен набирать точную строку и листья, так что машинное жесткое кодирование и место для ошибок.Как передать объект в качестве ключа словаря в Python (проблема с TestComplete?)

Это происходит только на TestComplete (V12). ли это возможно для меня, чтобы сделать что-то вроде этого,

class test(): 
    testStr = 'test' 
    testStr2 = 'test2' 

class Coverage(): 
    Data ={test.testStr : True, 
      test.testStr2 : 'something with white space'} 

Если это плохая идея, почему?

+0

Вы попробовали это, чтобы узнать, что произойдет? –

+0

Несомненно, вы можете. Ваш ключ по-прежнему является строкой, а не строкой * literal *. – Amadan

+0

Я устал, получаю ошибку синтаксиса – usustarr

ответ

0

Вы можете использовать Enum для этой цели.

from enum import Enum  # for enum34, or the stdlib version 
# from aenum import Enum # for the aenum version 
Animal = Enum('Animal', 'ant bee cat dog') 

Animal.ant # returns <Animal.ant: 1> 
Animal['ant'] # returns <Animal.ant: 1> (string lookup) 
Animal.ant.name # returns 'ant' (inverse lookup) 

или что то же самое:

class Animal(Enum): 
    ant = 1 
    bee = 2 
    cat = 3 
    dog = 4 

data = { 
    Animal.ant: 'small', 
    Animal.dog: 'big' 
} 
+0

Извините, я забыл упомянуть, мои строки arent всегда 1 слово. Иногда есть пробелы, вот почему я не использовал Enum. – usustarr

0

Это, как представляется, проблема в парсер Python TestComplete и SmartBear есть патч для нее. Вы можете загрузить contact them.