2024-05-05 18:08:43 发布
网友
我想用更好的函数替换下例中的“eval”。经过研究,我已经明白使用这个不是一个好主意。你知道吗
class_name = '{}'.format(SIP.supported_classes_dictionary[msg_type]) print 'Testing {}'.format(eval(class_name).supported_sip_services[msg_type]) variable_array = eval(class_name).fields_desc[2:]
对于您试图实现的目标,只要classes字典没有(不可信的)用户输入,它可能不是最糟糕的选择。你知道吗
为了改进代码,当您同时控制字典时,请考虑将类放在字典中,而不是放在类名中。这将更优雅地解决问题。你知道吗
像这样的
class A: pass class B: pass myclasses = [A, B] for cls in myclasses: print cls.__name__
可以避免在字符串和python对象/类之间进行转换。你知道吗
您可以将类本身(而不是它们的名称)存储为字典中的值。那你就可以
chosen_class = SIP.supported_classes_dictionary[msg_type] print 'Testing {}'.format(chosen_class.supported_sip_services[msg_type]) variable_arry = chosen_class.fields_desc[2:]
在最后两行中,我将您的eval(class_name)替换为chosen_class。这有两个原因:
eval(class_name)
chosen_class
class_name
SIP.supported_classes_dictionary
d[some_message_type] = 'SomeClass'
d[some_message_type] = SomeClass
对于您试图实现的目标,只要classes字典没有(不可信的)用户输入,它可能不是最糟糕的选择。你知道吗
为了改进代码,当您同时控制字典时,请考虑将类放在字典中,而不是放在类名中。这将更优雅地解决问题。你知道吗
像这样的
可以避免在字符串和python对象/类之间进行转换。你知道吗
您可以将类本身(而不是它们的名称)存储为字典中的值。那你就可以
在最后两行中,我将您的
eval(class_name)
替换为chosen_class
。这有两个原因:class_name
更改为chosen_class
(这只是一个装饰性的细节)SIP.supported_classes_dictionary
。由于您还没有在代码示例中演示如何做到这一点,因此我无法向您展示必须进行的确切更改,但可能是将d[some_message_type] = 'SomeClass'
更改为d[some_message_type] = SomeClass
,即在将类名插入字典时,删除类名周围的引号。你知道吗相关问题 更多 >
编程相关推荐