Python 方法与函数

标签 python function class methods

这个问题在这里已经有了答案:





Difference between methods and functions, in Python compared to C++

(6 个回答)


4年前关闭。




我正在寻求确认我的想法在 Python 方法与函数方面是否正确:

方法是类的一部分。

函数是在类之外定义的。

所以例如

class FooBar(object):
    def __init__(self):
        pass
    def foo(self):
        pass


def bar():
    pass


if __name__ == '__main__':
    fb = FooBar()

我明白 def foo定义方法和 def bar定义功能。我对么?

最佳答案

是的。需要明确的是,方法是函数,它们只是附加到类,当从实例调用该函数时,它会自动将该实例作为第一个参数隐式传递*。实际上,在何处定义该函数并不重要。考虑:

class FooBar:
    def __init__(self, n):
        self.n = n
    def foo(self):
        return '|'.join(self.n*['foo'])


fb = FooBar(2)

print(fb.foo())

def bar(self):
    return '*'.join(self.n*['bar'])

print(bar(fb))

FooBar.bar = bar

print(fb.bar())

*我强烈建议阅读 descriptor HOWTO .剧透警告,Functions are descriptors .这就是 Python 神奇地将实例传递给方法的方式(也就是说,所有函数对象都是描述符,当被类上的实例访问时,__get__ 方法将实例作为第一个参数传递给函数本身!。HOWTO 显示了 Python 实现所有这些,包括如何在纯 Python 中实现 property!

关于Python 方法与函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46636190/

相关文章:

python - 使用 GeoPandas 在 map 上绘制点组会生成空白图像

python - SecureAuth 原因 - ShareplumRequestError : Shareplum HTTP Post Failed : 403 Client Error: Forbidden for url

python - 如何在网络风格的 Plotly 图中设置单独的线宽(Python 3.6 | plot.ly)?

php - 在 web2py 中保留文件上传 html 表单

R studio 在我的函数中找不到对象

java - 如何解决 "static method ___ should be accessed in a static way"警告

javascript - 在同一个类的函数中调用setter

arrays - Smalltalk 数组操作

matlab - 如何绘制这个?

javascript - 我的 jQuery 函数互相破坏