python中的绑定方法和实例方法之间的区别

时间:2019-12-02 18:24:49

标签: python methods

我是python的初学者,很抱歉,如果听起来像是一个新手问题,但我对两者之间的区别感到非常困惑。有人可以举例说明一下,这真的很有帮助。提前致谢。

1 个答案:

答案 0 :(得分:1)

默认情况下,您创建的所有方法都是实例方法。 例如,这里distance_to_origin是类Point的实例方法:

class Point:
  def __init__(self, x, y):
    self.x = x
    self.y = y

  def distance_to_origin(self):
    return (self.x**2 + self.y**2)**0.5

Point.distance_to_origin只是一个带有一个参数并对其进行一些计算的函数。

>>> Point.distance_to_origin
<function Point.distance_to_origin at 0x7f2cd4610a60>

正如juanpa.arrivillaga在评论中所说, bound 方法是实例的 bound 实例方法。

>>> p = Point(3, 4)
>>> p.distance_to_origin
<bound method Point.distance_to_origin of <__main__.Point object at 0x7f2cd3f5aba8>>
>>> p.distance_to_origin()
5.0

您可以将其视为部分应用的函数,该方法所绑定的对象将被分配给self

>>> f = p.distance_to_origin
>>> f()
5.0

除实例方法外,还有类方法和静态方法。类方法作用于类,而静态方法既不作用于类,也不作用于类的实例。

class Point:
  def __init__(self, x, y):
    self.x = x
    self.y = y

  @classmethod
  def from_polar(cls, r, theta):
    x = r * cos(theta)
    y = r * sin(theta)
    return cls(x, y)

  @staticmethod
  def from_polar(r, theta):
    x = r * cos(theta)
    y = r * sin(theta)
    return Point(x, y)

您可以在这里阅读有关它们的信息:https://www.geeksforgeeks.org/class-method-vs-static-method-python/