我是一名学习 Python 的 Common Lisp 程序员。我希望能够从零件构造一个函数。例如,如果我有一个带有属性的类,那么我可以使用点符号来访问类实例的属性值,但显然我不能构建一个函数来做同样的事情。对于下面的代码,我可以要求 a.attr1,但是 bar(a,attr1) 不起作用。
class foo (object):
def __init__(self, x, y):
self.attr1 = x
self.attr2 = y
a = foo(17,23)
print a.attr1
def bar (obj, fun):
print obj.fun
bar(a, attr1)
NameError:名称“attr1”未定义
毫无疑问,我并没有以“pythonic”的方式思考,但一个稍微复杂一点的例子说明了我为什么要这样做。假设我想返回按属性排序的字典中的值:
d = {}
d['a'] = foo(17,23)
d['b'] = foo(13,19)
for v in sorted(d.values(), key = lambda x: x.attr1): print v.attr1
这可以正常工作,但以下函数不能:
def baz (dict,attr):
for v in sorted(dict.values(), key = lambda x: x.attr): print v.attr1
baz(d,attr1)
NameError:名称“attr1”未定义
在 Common Lisp 中,我会传入 attr1 引用,但 Python 中似乎没有类似的功能。有什么建议么?谢谢!