【问题标题】:hasattr is called a method, but it looks like a function [closed]hasattr 被称为方法,但它看起来像一个函数[关闭]
【发布时间】:2022-01-21 16:45:14
【问题描述】:

在 Python 中,函数接受参数并可选择返回信息。

functionname(param1, param2)
returnvalue = functionname(param1, param2)

Python 中的方法在 对象上调用。所以,首先指定对象,然后是一个点,然后是你要执行的方法

objectname.methodname(param, param)

像 Python rfind 和许多其他方法。

hasattr

hasattr 是这样使用的:

hasattr(my_object, method_to_test_for_existence)

根据定义,这显然是一个函数。

为什么有些网站将 hasattr 称为方法而不是函数?

  • TestPassport 他们的第一个测试问题。 (这个让我很担心,因为我正在准备 PCAP 考试:-))
  • GeeksForGeeks 标题为“Python hasattr() 方法”(在他们的第一行中,他们说:“Python hasattr() 函数是一个内置的实用函数”)

【问题讨论】:

  • 事实证明,人们有时会说方法,而实际上是指功能。
  • 很多人不明白函数和方法的区别。 hasattr 是一个内置函数。
  • 我不知道第一个网站,但 GeeksForGeeks 总的来说很糟糕,不要使用它。
  • 我赞同凯利的评论。 立即停止使用该网站。这不仅是错误的。这通常是可笑的错误。该网站仅存在于 SEO 以试图获得头把交椅;完全没有价值。
  • "为什么有些网站将 hasattr 称为方法而不是函数?"这确实是这些网站的作者 的问题,而不是 StackOverflow 的问题

标签: python


【解决方案1】:

Python的官方文档是这样定义的(感谢@Kelly Bundy here!):

function

返回一些值给调用者的一系列语句。它也可以传递零个或多个arguments,可用于执行主体。另请参阅 parametermethodFunction definitions 部分

method

在类体内定义的函数。如果作为该类实例的属性调用,该方法将获取实例对象作为其第一个argument(通常称为self)。请参阅functionnested scope


正方形是长方形,但并非所有长方形都是正方形。我解释世界的方式是,方法是函数,但并非所有函数都是方法。一个方法的独特之处在于它是一个特殊类型的函数,它也与一个类相关联并且可以访问类成员变量。

您的评估是正确的。

官方 Python 文档在其 list of "Built-in Functions" 中也有 hasattr()(从技术上讲,它们实际上是内置的“可调用对象”,因为有些是可调用的类对象,而不是标准函数;thanks @chepner)。 hasattr() 只是一个函数,而不是一个方法。

I believe @khelwood is correct:

事实证明,人们有时在指功能时会说方法。

人们经常滥用术语,人们只是错误地互换了术语 functionmethod,即使它们有细微的不同,因为方法是一种 特殊类型功能

在编程中经常发生滥用术语和错误地交换术语的情况。在我看来,大约 90% 的程序员会误用、混淆和互换“setup”(名词)和“setup”(动词)这两个词。它也一直以简单的古英语发生!在我看来,大约 70% 的美国人误用“好”和“好”,错误地互换它们,以及“少”和“少”(“我的煎饼比你少”在语法上不正确 em>——应该使用fewer这个词)、“there's”与“there are”(我发现自己经常误用“there's”代替“there are”)等等。

不管怎样,如果你看到有人误用了“方法”这个词,而他们的意思是“功能”,只要在你的脑海中正确解释它,就知道你是对的 :)。

这是我发现的一篇文章,我认为它非常好。 TutorialsPoint 并不总是正确,但这篇文章似乎是正确的并且写得很好:TutorialsPoint.com: Difference between Method and Function in Python。 (再说一次,他们也有可能从 Stack Overflow 上的一个答案中剽窃了那篇文章,因为我已经看到他们之前这样做了 甚至没有给出归属。 例如:this TutorialsPoint.com article 似乎是直接的抄袭自this Stack Overflow answer。我于 2020 年 10 月 23 日向 TutorialsPoint 发送了电子邮件,他们在 2020 年 10 月 25 日回复:“当然,加布里埃尔,我们会调查的。)

另见:

  1. What's the difference between a method and a function?(和my answer to this question
  2. TutorialsPoint.com: Difference between Method and Function in Python

【讨论】:

  • 即使是内置函数列表也包含很多严格来说不是函数的东西。其中许多是类型(strpropertymapzipint 等);该列表将更准确地称为内置 callables 的列表。 (从历史上看,有些条目是后来成为类型的函数。)
猜你喜欢
  • 1970-01-01
  • 2021-01-06
  • 2016-03-09
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-13
相关资源
最近更新 更多