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