有人能简单解释OOP环境中的方法与函数吗?


当前回答

方法和函数之间有什么区别?

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

作用向调用者返回某个值的一系列语句。它还可以传递零个或多个参数,这些参数可以在主体的执行中使用。另请参阅参数、方法和函数定义部分

方法在类主体内定义的函数。如果作为该类实例的属性调用,该方法将获取实例对象作为其第一个参数(通常称为self)。请参见函数和嵌套范围。


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

另请参见:

hasattr被称为方法,但它看起来像函数

其他回答

函数是一组可以用来处理数据的逻辑。

而Method是一个用于处理其所属对象的数据的函数。因此,从技术上讲,如果您有一个与您的类不完全相关但在类中声明的函数,那么它不是一个方法;这被称为糟糕的设计。

在Object Pascal或C++等OO语言中,“方法”是与对象关联的函数。因此,例如,“狗”对象可能具有“吠叫”功能,这将被视为“方法”。相反,“StrLen”函数是独立的(它提供作为参数提供的字符串的长度)。因此,它只是一个“函数”。Javascript在技术上也是面向对象的,但与C++、C#或Pascal这样的成熟语言相比,它面临许多限制。尽管如此,这种区别仍然存在。

另外还有几个事实:C#是完全面向对象的,因此您无法创建独立的“函数”。在C#中,每个函数都绑定到一个对象,因此从技术上讲,都是一个“方法”。关键是,在C#中很少有人将它们称为“方法”-他们只是使用“函数”一词,因为没有任何真正的区别。

最后,为了让任何Pascal专家都不要跳到我这里,Pascal还区分了“函数”(返回值)和“过程”(不返回值)。C#并没有明确区分这一点,当然,您可以选择是否返回值。

函数是执行特定任务的一组指令或过程。它可以用来将代码分割成易于理解的部分,这些部分也可以被调用或重用。

方法是可以对对象执行的操作。它也称为存储为对象财产的函数。

主要区别:函数不需要任何对象并且是独立的,而方法是一个函数,它与任何对象链接。

//firstName() is the function

function firstName(){
 cosole.log('John');
}

firstName() //Invoked without any object

const person = {
  firstName: "John",
  lastName: "Doe",
  id: 5566,
};

//person.name is the method
person.name = function() {
  return this.firstName + " " + this.lastName;
};

document.getElementById("demo").innerHTML =
"My father is " + person.name() //performs action on object; 

简单的记忆方式:

作用→ 免费(免费意味着它可以在任何地方,不需要在对象或类中)方法→ 成员(对象或类的成员)

我知道还有很多人已经回答了,但我发现以下是一个简单而有效的单行答案。虽然它看起来并没有比这里的其他答案好很多,但如果你仔细阅读它,它提供了你需要了解的关于方法与函数的一切。

方法是具有定义的接收器的函数,在OOP术语中,方法是对象实例上的函数。