在类函数中定义类函数:Python

时间:2013-02-17 19:15:38

标签: python class nested

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

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

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

2 个答案:

答案 0 :(得分:6)

这实际上取决于你想做什么。

>>> 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。有关示例,请参阅here

答案 1 :(得分:0)

这将从实例向类添加方法。 在大多数情况下,不是你想做的事情,但语言就是这么简单。

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

当你构建某种数据驱动的自修改代码时,这种技巧的使用是合理的(不是我们大多数人的日常情况)