Python的官方文档是这样定义的(感谢@凯利·邦迪在这里 https://stackoverflow.com/questions/70415511/hasattr-is-called-a-method-but-it-looks-like-a-function/70415890#comment124474084_70415890!):
function https://docs.python.org/3/glossary.html#term-function
一系列向调用者返回一些值的语句。也可以传递零个或多个论点 https://docs.python.org/3/glossary.html#term-argument可以在主体的执行中使用。也可以看看范围 https://docs.python.org/3/glossary.html#term-parameter, method https://docs.python.org/3/glossary.html#term-method,以及函数定义 https://docs.python.org/3/reference/compound_stmts.html#function section
method https://docs.python.org/3/glossary.html#term-method
在类体内定义的函数。如果作为该类实例的属性调用,该方法将获取实例对象作为其第一个argument https://docs.python.org/3/glossary.html#term-argument(通常称为self
). See function https://docs.python.org/3/glossary.html#term-function and 嵌套范围 https://docs.python.org/3/glossary.html#term-nested-scope.
正方形是长方形,但并非所有长方形都是正方形。在我解释世界的方式中,方法就是函数,但并非所有函数都是方法。方法的独特之处在于它是特殊类型的函数它也与类关联并可以访问类成员变量。
你的评价是正确的。
Python官方文档也有hasattr()
in its “内置函数”列表 https://docs.python.org/3/library/functions.html(从技术上讲,它们实际上是内置的“可调用对象”,因为有些是可调用的类对象,而不是标准函数;谢谢@chepner https://stackoverflow.com/questions/70415511/hasattr-is-called-a-method-but-it-looks-like-a-function/70415890#comment124474234_70415890). hasattr()
只是一个函数,而不是一个方法。
我相信@khelwood 是正确的: https://stackoverflow.com/questions/70415511/hasattr-is-called-a-method-but-it-looks-like-a-function#comment124473044_70415511
事实证明,人们有时在说功能时会说方法。
人们经常误用术语,并且人们只是错误地互换术语function and method尽管它们略有不同,但方法就是特殊类型的函数.
在编程中,滥用术语以及错误地将术语互换为另一种术语的情况时有发生。在我看来,大约 90% 的程序员滥用、混淆和互换了“setup”(名词)和“set up”(动词)这两个词。它也一直以简单的古英语出现!在我看来,大约 70% 的美国人误用了“good”和“well”,错误地互换了它们,以及“fewer”和“less”(“我的煎饼比你少”在语法上是错误的)不正确- 这个单词fewer应该被使用),“there's”与“there are”(我发现自己经常误用“there's”代替“there are”),等等。
无论如何,如果您看到有人在表示“功能”时误用了“方法”一词,只需在您的头脑中正确解释它并知道您是正确的:)。
这是我发现的一篇文章,我觉得还不错。教程点不是always正确,但这篇文章似乎是正确且写得好的:TutorialsPoint.com:Python 中方法和函数的区别 https://www.tutorialspoint.com/difference-between-method-and-function-in-python。 (话又说回来,他们也有可能抄袭了 Stack Overflow 上的一个答案,因为我以前见过他们这样做甚至没有给出归属。例证:这篇 TutorialsPoint.com 文章 https://www.tutorialspoint.com/What-is-the-difference-between-cerr-and-clog-streams-in-cplusplus貌似是直接抄袭的这个堆栈溢出答案 https://stackoverflow.com/questions/16772842/what-is-the-difference-between-cout-cerr-clog-of-iostream-header-in-c-when/46169665#46169665。我于 2020 年 10 月 23 日向 TutorialsPoint 发送了电子邮件,他们于 2020 年 10 月 25 日回复说:“当然,加布里埃尔,我们会调查此事。”)
也可以看看:
-
方法和函数有什么区别? https://stackoverflow.com/questions/155609/whats-the-difference-between-a-method-and-a-function (and 我对这个问题的回答 https://stackoverflow.com/questions/155609/whats-the-difference-between-a-method-and-a-function/70417274#70417274)
- TutorialsPoint.com:Python 中方法和函数的区别 https://www.tutorialspoint.com/difference-between-method-and-function-in-python