有人能简单解释OOP环境中的方法与函数吗?
当前回答
一般来说:方法是属于类的函数,函数可以在代码的任何其他范围内,因此您可以声明所有方法都是函数,但不是所有函数都是方法:
以下面的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”是有意义的,因为人和狗都可以被喂养,你可以调用这个函数,因为它不属于任何特定的类。
其他回答
方法是类的函数。用正常的术语来说,人们在各处交换方法和功能。基本上,您可以将它们视为相同的东西(不确定全局函数是否称为方法)。
http://en.wikipedia.org/wiki/Method_(计算机科学)
简单的记忆方式:
作用→ 免费(免费意味着它可以在任何地方,不需要在对象或类中)方法→ 成员(对象或类的成员)
它们通常是可互换的,但方法通常指类内的子例程,函数通常指类外的子例程。例如,在Ruby中:
# function
def putSqr(a)
puts a ** 2
end
class Math2
# method
def putSqr(a)
puts a ** 2
end
end
在Java中,所有内容(包和导入语句除外)都必须在类中,人们几乎总是将它们称为“方法”。
方法和函数之间有什么区别?
Python的官方文档是这样定义的(感谢@Kelly Bundy!):
作用向调用者返回某个值的一系列语句。它还可以传递零个或多个参数,这些参数可以在主体的执行中使用。另请参阅参数、方法和函数定义部分
方法在类主体内定义的函数。如果作为该类实例的属性调用,该方法将获取实例对象作为其第一个参数(通常称为self)。请参见函数和嵌套范围。
正方形是矩形,但并非所有矩形都是正方形。我解释世界的方式是,一个方法是一个函数,但并不是所有的函数都是方法。方法之所以独特,是因为它是一种特殊类型的函数,它也与类关联,并且可以访问类成员变量。
另请参见:
hasattr被称为方法,但它看起来像函数
类是一些数据和函数的集合,可以选择使用构造函数。
在创建该特定类的实例(副本、复制)时,构造函数初始化该类并返回一个对象。
现在类成为对象(没有构造函数)&函数在对象上下文中称为方法。
所以基本上
类<==new==>对象
函数<==new==>方法
在java中,构造函数的名称通常与类名相同,但实际上,构造函数类似于实例块和静态块,但具有用户定义的返回类型(即class类型)
而类可以具有静态块、实例块、构造函数、函数对象通常只有数据和方法。