我是一位Python非常菜的学习者,最近开始学习类的概念。我大致理解了类的概念,但不明白为什么不能简单地编写一些函数而非编写一个类?
例如,(我正在从Interactive python学习)其中一个练习(需要使用类编写)是:
添加一个
distanceFromPoint
方法,与distanceFromOrigin
类似,但它以Point
作为参数,并计算该点与self之间的距离。向
Point
添加一个reflect_x
方法,返回一个新的Point
,它是该点关于x轴的镜像。例如,Point(3, 5).reflect_x()
是(3, -5)
。
他们使用类编写代码如下:
import math
class Point:
""" Point class for representing and manipulating x,y coordinates. """
def __init__(self, initX, initY):
""" Create a new point at the given coordinates. """
self.x = initX
self.y = initY
def getX(self):
return self.x
def getY(self):
return self.y
def distanceFromOrigin(self):
return ((self.x ** 2) + (self.y ** 2)) ** 0.5
def distanceFromPoint(self, otherP):
dx = (otherP.getX() - self.x)
dy = (otherP.getY() - self.y)
return math.sqrt(dy**2 + dx**2)
p = Point(3, 3)
q = Point(6, 7)
print(p.distanceFromPoint(q))
当我可以像这样简单地编写它们时,为什么要使用类呢?
def distanceFromPoint(p,q): # they are tuples
y = (p[0]-q[0])**(2)+(p[1]-q[1])**(2)
return y**(1/2)
def reflectx(p):
return (p[0],-p[1])
p = (3,3)
q = (6,7)
getX
和getY
方法不被视为 Pythonic 代码。你可以直接访问x
和y
属性。 - Matthiasmypoint.x
比mypoint.getX()
更简单、更清晰。然而,在这样一个简单的例子中很难说明面向对象编程的强大之处。直到我遇到了一个真正需要解决的问题,我才真正理解了它的威力,我突然意识到,如果我编写一个继承自别人先前定义的类的类,那么解决问题将变得非常简单。 - nekomatic