类中的Python查找方法

2024-04-27 03:21:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我定义了一个名为Point的类,它定义了x,y坐标系中的一个点。定义和方法如下所示。我创建了自己版本的str方法,以可打印的形式返回创建的点(必需)。但是,当我尝试将返回的点传递给另一个方法以确定两点(p1和p2)之间的距离时,我在尝试解析传递到该方法的字符串(p2)时得到以下错误:

AttributeError: Point instance has no attribute 'find'

当我传入一个定义为p2的字符串时,它应该可以正常工作。任何帮助都将不胜感激。谢谢您。在

代码如下:

^{pr2}$

Tags: 方法instance字符串版本距离定义错误形式
3条回答

如果您打算在类中使用私有或半私有方法,请重命名函数。在

如果您的find方法只在Point类中使用,请将其重命名为__find。否则,您可以将其重命名为_find,这会告诉其他开发人员此方法是私有的,但是他们仍然可以使用它,即使他们不应该这样做。在

方法find未在对象中声明,您必须按如下方式更改find方法声明:

...
def find(self,j):
    return j
...

双下划线是为str、cmp、eq等类运算符方法保留的。。。 您可以获得有关python类here的更多信息

您将方法命名为__find__。删除双下划线:

def find(self, j):
    return j

您实际上应该只对Special method names使用__...__“dunder”(双下划线)方法名,以避免混淆和将来的名称冲突。在

但是,您正在传递一个Point实例,因此只需直接访问属性:

^{pr2}$

或者,进一步简化,使用Python中最常用的下划线名称样式作为方法:

def distance_to(self, p2):
    return math.sqrt(math.pow((p2.x - self.x), 2) + math.pow((p2.y - self.y), 2))

然后可以删除__find____getitem__方法,它们看起来像是试图让.DistanceTo()方法工作。在

然后整个类变成:

class Point(object):
    """Define a Point"""

    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y

    def __str__(self):
        return "({0.x}, {0.y})".format(self)

    def distance_to(self, p2):
        return math.sqrt(math.pow((p2.x - self.x), 2) + math.pow((p2.y - self.y), 2))

对类(继承自object)和__str__方法(使用字符串格式)使用稍微多一点的Python习惯用法。在

现在,类的行为与预期一致:

>>> p1 = Point()
>>> p2 = Point(3,4)
>>> print p1
(0, 0)
>>> print p2
(3, 4)
>>> print p1.distance_to(p2)
5.0

类实例不是字符串,尽管可以将它们转换为字符串(例如打印时),但不需要将它们视为字符串。直接访问它们的属性。在

相关问题 更多 >