2

我有一个代码,我想在类函数中定义一个类函数。这是我想做的一个更简单的例子。该程序的目标是打印 4。

>>> class bluh:
...     def haha(self):
...             print 3
...     def __init__(self):
...             def haha(self):
...                     print 4
... 
>>> x = bluh()
>>> x.haha()
3

我应该如何编写这个程序来做我想做的事?

4

2 回答 2

8

这真的取决于你想做什么。

>>> 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从闭包中获得参考,而且很多时候,这可能已经足够好了。如果你真的想在实例上打猴子补丁/鸭子打一个新方法,你需要使用types.MethodType. 有关示例,请参见此处。

于 2013-02-17T19:19:40.927 回答
0

这将从实例向类添加方法。在大多数情况下,这不是您想做的事情,但语言使它变得如此简单。

class A(object):
    def __init__(self):
        def foo(self):
            print "bar"
        self.__class__.foo = foo 

当您构建某种数据驱动的自我修改代码时,使用这种技巧是合理的(对于我们大多数人来说,这不是每天都会遇到的情况)

于 2013-02-17T19:19:49.343 回答