重载和重写傻傻分不清?
测试python
是否有类似Java
重载的操作,只关注常用部分,不钻牛角尖
python
基本上没有重载,因为在python
一切都是对象,那么函数的名称也是一个对象的引用,当存在相同函数名时,可以理解为该变量名引用地址的改变,即钱一个变量的地址会被后一个覆盖。
python
是有重载的,如对字符串和数值变量add
运算时,会自动调用重载的。
print('a' + 'b') ---> ab
print(1 + 2) ---> 3
以上,可充分证明
python
存在重载。
重载的操作很有趣,主要是指:函数或方法具有相同的名称,但是在参数的类型以及数量方面出现差异(与排序无关)时,那么在调用该函数时可根据传递参数判断使用哪一个函数或方法。
# 测试python是否有重载,还是python只有重写
class Zoo(object):
def __init__(self, name, age, gender, isDanger):
self.name = name
self.age = age
self.gender = gender
self.isDanger = isDanger
def age_setter(self, num):
self.age = num
return self.age
def age_setter(self, num, desc):
self.age = num
print(desc)
return self.age
dog = Zoo(name='dog', age=12, gender='male', isDanger=False)
dog.age_setter(11, '修改了年龄')
当两个函数调换顺序,即会报错。
以上,事实证明
python
中并没有存在重载,而只是存在了重写,即可以理解为覆盖。