有时使用globals()函数很方便。在下面的示例中,我使用一些约定创建了一个函数字典,即函数名称的第一个字符必须与键匹配:
def a_fun(c):
print(c, 'from a_fun')
def b_fun(c):
print(c, 'from b_fun')
def fun():
fun_dict = dict.fromkeys({'a', 'b'})
return {key: globals()[key + '_fun'] for key in fun_dict}
fun()['a'](33), fun()['b'](44)
该代码本身可以正常工作并产生:
33 from a_fun
44 from b_fun
但是在类描述中,这是不可能的。我只是这样管理:
class fabric():
def __a_fun(self, c):
print(c, 'from __a_fun')
def __b_fun(self, c):
print(c, 'from __b_fun')
def fun(self):
# print(locals())
# print(globals())
return {'a': self.__a_fun, 'b': self.__b_fun}
z = fabric()
z.fun()['a'](33)
是什么赋予了
33 from __a_fun
问题是locals()和globals()字典中缺少 __a_fun 和 __b_fun 。
你能告诉我这是否可以像第一个例子一样完成吗?这个想法是在添加下一个数据处理选项时不更改代码。好吧,如果发生了变化,我只需在文件中添加一个函数,不需要在其他地方进行更改。
也就是说,使用类中的函数自动填充字典的问题。
可以从中获取所有类方法的名称,
self.__class__.__dict__它们将以以下开头self.__class__.__name__:结论:
一个不开字典的选项,而是从课堂上获取所有内容: