在函数上定义 __getattr__ 和 __getitem__ 没有效果

2024-01-09

免责声明这只是元编程的练习,没有实际意义 目的。

我已分配__getitem__ and __getattr__函数对象上的方法,但是 没有效果...

def foo():
  print "foo!"

foo.__getitem__ = lambda name: name
foo.__getattr__ = lambda name: name
foo.baz = 'baz'

健全性检查我们can为函数分配属性:

>>> foo.baz
'baz'

整洁的。那些“魔术师”又如何呢?

>>> foo.bar
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'function' object has no attribute 'bar'

>>> foo['foo']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'function' object is not subscriptable

>>> getattr(foo, 'bar')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'function' object has no attribute 'bar'

函数对象上是否有可能有一个“神奇的吸气剂”?


没有!分配__getitem__到一个实例不起作用any对象类型:

>>> class A(object):
...   pass
...
>>> a = A()
>>> a.__getattr__ = lambda name: name
>>> a.foo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'A' object has no attribute 'foo'

And你无法定义__getattr__关于内置函数类型:

>>> import types
>>> types.FunctionType.__getitem__ = lambda name: name
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't set attributes of built-in/extension type 'function'

And

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在函数上定义 __getattr__ 和 __getitem__ 没有效果 的相关文章

随机推荐