区分重写和重载

2024-04-20 08:46:24 发布

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

我有两个python类

  1. 喝醉了
  2. 平常喝醉的

通常的醉酒类继承自醉酒类,并为其move方法提供一个新的实现,如下所示

class Drunk:
    def __init__(self,name):
        self.name = name

    def move(self,field,cp,dist=1):
        if field.getDrunk().name!= self.name:
            raise ValueError('Drunk not in the field!')
        for i in range(dist):   
            #pt = CompassPt(random.choice(CompassPt.possibles))
            field.move(cp,1)


class UsualDrunk(Drunk):
    def move(self,field,dist=1):
        cp = random.choice(CompassPt.possibles)
        Drunk.move(self,field,CompassPt(cp),dist)

现在,通常的醉酒类有两个名为move的方法,但参数不同。

那么在这种情况下,它是重写还是重载?


Tags: 方法nameinselffieldmovedistdef
1条回答
网友
1楼 · 发布于 2024-04-20 08:46:24

这是压倒一切的。Python不支持重载。

也就是说,用一个接受不同参数的方法重写一个方法,特别是当它接受的参数比基类方法少时,是一个坏主意。考虑:

some_drunk.move(field, cp)

如果some_drunk是一个正则的Drunk,则此操作有效。但是如果它是UsualDrunk,它将把cp的值传递给dist参数,这可能不是我们想要的。

相关问题 更多 >