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


当前回答

函数和方法之间主要区别的非常一般的定义:

函数在类外部定义,而方法在类内部和类的一部分定义。

其他回答

函数是一个数学概念。例如:

f(x,y) = sin(x) + cos(y)

表示函数f()将返回第一个参数的sin加上第二个参数的余弦。这只是数学。碰巧sin()和cos()也是函数。函数有另一个属性:对具有相同参数的函数的所有调用都应返回相同的结果。

另一方面,方法是与面向对象语言中的对象相关的函数。它有一个隐式参数:被作用的对象(及其状态)。

因此,如果对象Z具有方法g(x),则可能会看到以下内容:

Z.g(x) = sin(x) + cos(Z.y)

在这种情况下,传入参数x,与前面的函数示例相同。然而,cos()的参数是位于对象Z内部的值。Z和位于对象Z内的数据(Z.y)是Z的g()方法的隐式参数。

一般来说:方法是属于类的函数,函数可以在代码的任何其他范围内,因此您可以声明所有方法都是函数,但不是所有函数都是方法:

以下面的python为例:

class Door:
  def open(self):
    print 'hello stranger'

def knock_door():
  a_door = Door()
  Door.open(a_door)

knock_door()

给出的示例向您展示了一个名为“Door”的类,该类具有名为“open”的方法或操作,它被称为方法,因为它是在类中声明的。下面还有一部分代码带有“def”,它定义了一个函数,这是一个函数因为它没有在类中声明,这个函数调用我们在类中定义的方法,正如您所看到的那样,最后函数被自己调用。

正如您所看到的,您可以在任何地方调用函数,但如果您想调用方法,要么必须传递一个与声明方法的类(class.method(object))类型相同的新对象,要么必须调用对象内部的方法(object.method()),至少在python中是这样。

将方法视为只有一个实体可以做的事情,所以如果你有一个Dog类,那么只在该类中有一个bark函数是有意义的,这就是一个方法,如果你还有一个Person类,那么编写一个不属于任何类的函数“feed”是有意义的,因为人和狗都可以被喂养,你可以调用这个函数,因为它不属于任何特定的类。

方法位于对象上或在类中是静态的。函数独立于任何对象(并且在任何类之外)。

对于Java和C#,只有方法。对于C,只有函数。

对于C++和Python,这取决于您是否在类中。但在基本英语中:

功能:独立功能。方法:做某事的一种方式,它有不同的方法或方法,但与同一方面(也称为类)相关。

TL;博士

函数是一段要运行的代码。方法是对象内的函数。

函数示例:


function sum(){
  console.log("sum")l
}

方法示例:

const obj = {
a:1,
b:2,
sum(){
  }
}

所以这就是为什么我们说函数中的“this”关键字不是很有用,除非我们将其与call、apply或bind一起使用。。因为call、apply、bind将作为对象内部的方法调用该函数==>基本上它将函数转换为方法

函数是一段按名称调用的代码。它可以传递数据以进行操作(即参数),也可以选择返回数据(返回值)。传递给函数的所有数据都是显式传递的。

方法是由与对象关联的名称调用的一段代码。在大多数方面,它与函数相同,但有两个关键区别:

方法隐式传递给调用它的对象。方法能够对包含在类中的数据进行操作(记住对象是类的实例-类是定义,对象是该数据的实例)。

(这是一个简化的解释,忽略了范围等问题)