在类函数内部定义类函数:Python

3 投票
2 回答
17148 浏览
提问于 2025-04-17 16:11

我有一段代码,我想在一个类的函数里面定义另一个函数。下面是一个更简单的例子,展示我想做的事情。这个程序的目标是打印出数字4。

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

我应该怎么写这个程序才能实现我的目标呢?

2 个回答

0

这段话的意思是,你可以通过一个实例给一个类添加方法。虽然在大多数情况下,这并不是你想要做的事情,但这个语言让这件事变得非常简单。

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

使用这种技巧是有道理的,特别是在你需要构建一些基于数据的自我修改代码时(不过对我们大多数人来说,这并不是每天都会遇到的情况)。

9

这其实要看你想做什么。

>>> 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。想要了解更多,可以查看 这里 的例子。

撰写回答