代码之家  ›  专栏  ›  技术社区  ›  aaronasterling

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

  •  0
  • aaronasterling  · 技术社区  · 14 年前

    看来这个问题的答案是可以接受的

    方法是作为类成员的函数。

    我不同意这一点。

    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"
    
    1. func 成员 Foo ?
    2. ?

    我很清楚,如果 功能 self 争论。这是显而易见的。我感兴趣的是它是否是 foo 如果它是一个 method 如所示。

    3 回复  |  直到 14 年前
        1
  •  7
  •   Alex Martelli    14 年前

    >>> class Foo(object): pass
    ... 
    >>> def func(self): pass
    ... 
    >>> Foo.func = func
    >>> f = Foo()
    >>> f.func()
    >>> 
    

    你犯了一个错误,忘了在 def 这个 self 争论完全与 f.func 定义 class 而不是在它里面(当然是完全合法的Python,但是,正如我说的,special)也与这个案子无关:如果你忘记了第一个论点(按惯例命名) 自己 定义 对于方法的语句,调用它们时会出错,当然(a TypeError ,当然)。

        2
  •  1
  •   Tom Whittock    14 年前

    如果 func 有一个自我论证,就像其他任何实例方法一样。

    f.func ,你实际上是在绑定 f 函数的第一个参数——然后它变成一个部分应用程序,您可以为它提供进一步的参数。

    如果您希望它是一个静态方法,那么您需要staticmethod decorator,它只丢弃第一个参数,并将其余参数传递到原始函数中。

    def func(self): pass
    

    --或者--

    Foo.func = staticmethod(func)
    

        3
  •  0
  •   kindall    14 年前

    如前所述,func是Foo的成员,也是Foo实例(如f)的方法。但是,无法成功调用它,因为它至少不接受一个参数。

    ()方法。换言之,当您像一个方法那样调用它时,Python尝试像一个方法那样调用它就足够了。如果它像鸭子一样呱呱叫,换句话说。。。

    在我看来,这个电话不成功既不存在也不存在。

    真正地