什么构成一个班级的成员?什么构成方法?

aar*_*ing 0 python

这个问题似乎是一个可以接受的答案

什么是方法?

方法是一个类的成员的函数.

我不同意这一点.

class Foo(object):
    pass

def func():
    pass

Foo.func = func

f = Foo()

print "fine so far"
try:
    f.func()
except TypeError:
    print "whoops! func must not be a method after all"
Run Code Online (Sandbox Code Playgroud)
  1. func会员Foo吗?
  2. func一种方法Foo吗?

我很清楚,如果func有一个self论点,这将有用.这很明显.我很感兴趣,如果它是一个成员,foo如果它是一个method呈现.

Ale*_*lli 6

你只是测试错了:

>>> class Foo(object): pass
... 
>>> def func(self): pass
... 
>>> Foo.func = func
>>> f = Foo()
>>> f.func()
>>> 
Run Code Online (Sandbox Code Playgroud)

你忘了有在错误defself说法有绝对无关,与f.func"不是一种方法",当然.def外部class而不是内部的特殊自负(完全合法的Python当然,但正如我所说,特殊的)与案件无关:如果你忘记了第一个参数(通常命名self)def对于方法的陈述,你当然会在调用它们时遇到错误(当然TypeError,无论何时,只要调用中指定的实际参数与当前接受的形式参数不匹配,你就得到def了).

  • `func`是一个名字.当用作**裸**名称时,它不绑定到方法对象.当作为****合格的名称,即所使用的,名称的属性绑定到类或其一个实例,其提供**值是**的方法的对象(因为它发生,不同的方法对象中的每个和每次:`print f.func是f.func`显示'False`).因此,断言"func是一种方法"既不是真也不是假:它毫无意义.(如果函数对象没有第一个参数,则无法正确调用方法对象,但当然这不是**意味着它不是方法对象!). (5认同)