Python interview - override & overload

本文探讨了Python中的方法重载和重写。重载在Python中通过默认参数值、关键字参数和可变参数列表实现。而重写通过继承并使用`super`关键字调用父类方法。Python的继承特性包括基类构造不会自动调用、调用基类方法需显式指定等。此外,文章还介绍了Python中搜索方法的顺序,以及新式类与经典类的区别,并提供了多个参考资料链接。
摘要由CSDN通过智能技术生成

我们先说overload 重载。


在Java中,支持重载,重载的意思是能够定义有相同方法名的方法,传入方法中的参数个数,或者参数类型不同。比如:

int mymethod(int a, int b)
int mymethod(int num)

float mymethod(int a, float b)
float mymethod(float var1, int var2)

int mymethod(int a, int b)
int mymethod(float var1, float var2)

如下的例子是错误的,因为传入的参数个数相同,类型相同,仅仅给了一个不同的命名并不改变具体的方法。

int mymethod(int a, int b, float c)
int mymethod(int var1, int var2, float var3)

那么对于python,我们也可以写出这样的方法,举例来说明为什么python不支持overload

def sum(a,b):
   return a+b

def sum(a,b,c):
   return a+b+c

上述的方法,如果python支持overload,我们运行两个不同的sum方法的时候,会得到不同的结果

print sum(1,2)
print sum(1,2,3)

# result

TypeError: sum() takes exactly 3 arguments (2 given)

当我们想调用第一个sum方法的时候报错。这是因为python不支持overload,第二个同名的方法会覆盖overwrite第一个方法。

所以,当我们想在python中运用类似overload的技巧的时候,更多的我们会使用

default argument values

def ask_ok(prompt, retries=4, complaint='Yes or no, please!')
你可以调用这个方法,传入不同个数的参数

ask_ok('Do you really want to quit?')
ask_ok('OK to overwrite the file?', 2)
ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')

keyword arguments

def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'):
如果使用的keyword赋值,那么不需要按照顺序传入参数

parrot(1000)                                          # 1 positional argument
parrot(voltage=1000)                                  # 1 keyword argument
parrot(voltage=10000
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值