时,这种技巧的使用是合理的
我有一个代码,我想在其中定义类函数中的类函数。下面是我想做的一个更简单的例子。这个程序的目标是打印4。
>>> class bluh:
... def haha(self):
... print 3
... def __init__(self):
... def haha(self):
... print 4
...
>>> x = bluh()
>>> x.haha()
3
我应该如何编写这个程序来实现我想要的功能?
这实际上取决于你想做什么。
>>> class Foo(object):
... def haha(self):
... print 3
... def __init__(self):
... def haha():
... print 4
... self.haha = haha
...
>>> a = Foo()
>>> a.haha
<function haha at 0x7f4539e25aa0>
>>> a.haha()
4
在前面的例子中,haha
实际上不是一个方法,它只是一个函数。但它会从闭包中获得对self
的引用,而且很多时候,这可能已经足够好了。如果您真的想在实例上对新方法进行monkeypatch/duck-punch,则需要使用types.MethodType
。有关示例,请参见此处。
这将从实例向类添加一个方法。在大多数情况下,这不是你想做的事情,但语言让它变得那么简单。
class A(object):
def __init__(self):
def foo(self):
print "bar"
self.__class__.foo = foo
当你构建某种数据驱动的自修改代码(对我们大多数人来说不是每天都有的情况)