我希望能够调用这样的东西:
def lookup(key):
if key == 0:
return "Default"
elif key == 1:
return str(key) + " vertex"
elif key <= 99999:
return str(key) + " vertices"
else:
return "Ignore"
使用以下语法:
my_dict[key]
所以从本质上讲,我想使用字典语法,但不是实际查找真正的字典,而是使用条件来确定键查找的结果应该是什么,并从那里返回一个值。my_dict是什么并不重要,只要它可以像字典一样访问即可。
我知道你可以继承标准的Pythondict
类,但我无法弄清楚是否/如何使用这种能力来满足上述要求。
使用答案的示例
感谢大家的帮助!以下是我使用此功能的方式:
具有字典语法的自定义函数:
class ComplexSetting:
def __getitem__(self, key):
if 0<=key<=10000:
return "Reserved " + hex(key)
elif 10001 <= key <= 60000:
return str(key*2)
else:
raise KeyError
设置"字典":
setting_1 = {
0: "option_0"
1: "option_1"
2: "option_2"
}
setting_2 = ComplexSetting()
实现泛型设置的类:
class UserInterface:
def __init__(self, setting):
self.setting = setting
self.ask_for_input()
def ask_for_input(self):
value = input("Please select an option.")
# use generic setting dictionary to access result
result = self.setting[value]
# do some function with the result
print(result)
现在,我可以随时随地重用UserInterface
类,而不必担心更改self.setting
在实现之间的使用方式。我想这个特定的例子是毫无用处的,但对于我的特定用例来说,拥有这种能力是非常有帮助的
你可以像这样创建它:
class my_dict_class:
def __getitem__(self, key):
if key == 0:
return "Default"
elif key == 1:
return str(key) + " vertex"
elif key <= 99999:
return str(key) + " vertices"
else:
return "Ignore"
res = my_dict_class()
print(res[0]) # prints "Default"
在类中创建具有object.__getitem__(self, key)
的类将允许您使用该语法:
class my_dict_class:
def __getitem__(self, key):
if key == 0:
return "Default"
elif key == 1:
return str(key) + " vertex"
elif key <= 99999:
return str(key) + " vertices"
else:
return "Ignore"
my_dict = my_dict_class()
print(my_dict[0]) # Default
print(my_dict[1]) # 1 vertex
print(my_dict[55555]) # 55555 vertices
print(my_dict[99999]) # 99999 vertices
print(my_dict[3748293478932]) # Ignore
编辑:太慢:p
完整代码(基于您的代码(:
class myDict(object): # if you want no inheritance at all(from dict).
def __init__(this):
pass;
def __getitem__(this, key):
if(not(isinstance(key, int))):
raise Exception("TYPE KEY ERROR.");
#END;
if(key==0):
return"DEFAULT";
elif(key==1):
return str(key)+" vertex";
elif(key<=99999):
return str(key) + " vertices";
else:
return str.__new__((str), "Ignore");
#endif;
#END;
#END;
my_dict = myDict();
print(my_dict[1]); # e.g.