Python类的三种不同的Method调用

时间:2016-11-01 14:39:57

标签: python python-2.7 python-3.x

我正在阅读this article。在本文中,一行说:

  

对于C类,C的实例x和C的方法m如下   三个方法调用是等价的:

     

type(x).m(x,...)

     

C.m(x,...)

     

x.m(...)

我尝试将此语句转换为这样的程序:

class C:
    def __init__(self,a,c):
        self.a=a
        self.b=c

    def m(self):
        d=self.a+self.b

x=C(1,2)
x.m()
print(type(x).m(x))
print(C.m(x))
print(x.m())

但我不知道这三种方法的含义以及它们是如何工作的?如果我的程序使用方法错误,请更正。

修改

我不是要求修改此代码,我问的是如何使用这三种方法,并为每个方法调用提供一个示例。

如果你能为每种对我有帮助的三种方法提供适当的例子。

2 个答案:

答案 0 :(得分:1)

如果使用python 2.7,您应该从C派生object以获得type(x)的正确类型,m知道方法class C(object): def __init__(self,a,c): self.a=a self.b=c def m(self): return self.a+self.b x=C(1,2) x.m() print(type(x).m(x)) print(C.m(x)) print(x.m())

x.m()

我认为在python 3中,这是隐含的。是的,而不是计算d,我只返回结果 - 所以你看到了什么。

根据您的澄清进行修改:

显示调用该方法的三种方法用于说明。如果可能的话,我没有看到任何明显的理由不使用m。但是在python中,这是一个快捷方式:在实例x上调用x类型的方法type(x).m(x)type(x)是写出正在发生的事情的最直接的方式。现在,Cobject(在python 3中或者使用新式类 - 从{{1}}派生 - 至少是else实例),所以第一种和第二种写作方式是等价的好。

答案 1 :(得分:0)

你的回复没什么。

你想要

def m(self):
    return self.a + self.b

最有可能在C班级