Python-类中的Function对象

时间:2017-12-05 07:11:47

标签: python python-3.x

class new:
    i=1
    def __init__(self):
        name='sakthi'

    def add(self,one,two):
         return one+two

k=new.add

print(k)

当我执行上述程序时。我得到function new.add at 0x0068E270作为输出。

任何人都可以帮助我理解,发生了什么以及我可以使用价值k进行什么样的操作。

2 个答案:

答案 0 :(得分:1)

您分配给new.add的{​​{1}}值是一个函数。在Python 2中,它本来是一个特殊的“未绑定方法”对象,但是你的输出表明你正在使用Python 3(除了概念上不再存在未绑定的方法)。

与任何功能一样,您可以根据需要调用k,传递适用于kselfone的任何值。例如,two(将返回k("foo", 1, 2))。

传统上3参数应该是self类的一个实例,尽管在Python 3中没有任何强制执行(检查这是Python 2中未绑定方法对象的用途) )。因此,在上面的示例中传递一个字符串工作正常,因为new没有在函数体中用于任何事情。 (如果您将不合适的参数作为self传递,则更复杂的方法通常会失败。)

调用方法的常用方法是首先创建一个类的实例,然后在实例上调用该方法。这会导致实例自动作为第一个参数传递:

self

答案 1 :(得分:1)

function new.add at 0x0068E270在CPython中,将是k的地址。由于k只是一个功能,您仍然可以执行print(k('foo', 1, 2))之类的打印5