我在python中有两个类
通常的drunk类继承自drunk,并为其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)
Run Code Online (Sandbox Code Playgroud)
现在通常的醉酒类有两个名为move但具有不同参数的方法.
那么在这种情况下它是覆盖还是超载?
它压倒一切.Python不支持重载.
也就是说,用一个接受不同参数的方法覆盖一个方法,特别是当它接受的参数少于基类方法时,这是一个坏主意.考虑:
some_drunk.move(field, cp)
Run Code Online (Sandbox Code Playgroud)
如果some_drunk是常规Drunk,这是有效的.但如果它是a UsualDrunk,它会将值传递cp给dist参数,这可能不是预期的.