有人能解释一下这里发生了什么吗?
class Test(object):
__getitem__ = getattr
t = Test()
t['foo']
Run Code Online (Sandbox Code Playgroud)
给出错误(在Python 2.7和3.1中):
TypeError: getattr expected at least 2 arguments, got 1
Run Code Online (Sandbox Code Playgroud)
然而:
def f(*params):
print params # or print(params) in 3.1
class Test(object):
__getitem__ = f
Run Code Online (Sandbox Code Playgroud)
打印出我期望的两个参数.
小智 6
令人困惑的是,内置函数(以及某些其他类型的可调用函数)不会像正常函数在类中使用时那样成为绑定方法:
>>> class Foo(object): __getitem__ = getattr
>>> Foo().__getitem__
<built-in function getattr>
Run Code Online (Sandbox Code Playgroud)
相比:
>>> def ga(*args): return getattr(*args)
>>> class Foo(object): __getitem__ = ga
>>> Foo().__getitem__
<bound method Foo.ga of <__main__.Foo object at 0xb77ad94c>>
Run Code Online (Sandbox Code Playgroud)
因此,getattr未正确接收第一个('self')参数.你需要编写一个普通的方法来包装它.
| 归档时间: |
|
| 查看次数: |
1543 次 |
| 最近记录: |