一、参考博文:https://blog.csdn.net/yangkaiorange/article/details/82461496
# 假如a和b模块里面都有一个test方法,谁调用完就属于谁
from a import *
test() # 属于a
from b import *
test() # 属于b
二、重载(C语言):方法名相同,根据实参类型的不同调用不同的方法
# 方法1
def set_info(int number):
****
# 方法2
def set_info(char* str):
****
# 因为实参为字符串类型,所以调用方法2
s1.set_info('haha')
python基本没有重载,只有重写,因为不允许出现多个相同的函数名(特殊除外:数字1+2+3,字符串1+2+3)
三、多继承父类被重复调用,资源浪费
#coding:utf-8
class Parent(object):
def __init__(self, name):
print('父类Parent的init调用--->开始')
self.name = name
print('父类parent的init调用--->结束')
class Son1(Parent):
def __init__(self, name, age):
print('子类Son1的init调用--->开始')
self.age = age
Parent.__init__(self, name) # 调用父类
print('子类Son1的init调用--->结束')
class Son2(Parent):
def __init__(self, name, gender):
print('子类Son2的init调用--->开始')
self.gender = gender
Parent.__init__(self, name)
print('子类Son2的init调用--->结束')
class Grandson(Son1, Son2):
def __init__(self, name, age, gender):
print('子子类Grandson的init调用--->开始')
Son1.__init__(self, name, age) # 单独调用父类的初始化方法
Son2.__init__(self, name, gender)
print('子子类Grandson的init调用--->结束')
gs = Grandson('grandson', 12, '男')
print('姓名:', gs.name)
print('年龄:', gs.age)
print('性别:', gs.gender)
多继承中super调用所有父类的被重写的方法,解决资源浪费(父类名改成super())
*args :以元组的形式保存参数(多出来的参数)
**kwargs :以字典的形式传递关键字参数(多出来的关键字)
#coding:utf-8
# *args 以元组的形式保存参数(多出来的参数) **kwargs 以字典的形式传递关键字参数(多出来的关键字)
class Parent(object):
def __init__(self, name, *args, **kwargs): # 为避免多继承报错,使用不定长参数,接收参数
print('父类Parent的init调用--->开始')
self.name = name
print('父类parent的init调用--->结束')
class Son1(Parent):
def __init__(self, name, age, *args, **kwargs): # 为避免多继承报错,使用不定长参数,接收参数
print('子类Son1的init调用--->开始')
self.age = age
super().__init__(name, *args, **kwargs) # 为避免多继承报错,使用不定长参数,接收参数
print('子类Son1的init调用--->结束')
class Son2(Parent):
def __init__(self, name, gender, *args, **kwargs): # 为避免多继承报错,使用不定长参数,接收参数
print('子类Son2的init调用--->开始')
self.gender = gender
super().__init__(name, *args, **kwargs) # 为避免多继承报错,使用不定长参数,接收参数
print('子类Son2的init调用--->结束')
class Grandson(Son1, Son2):
def __init__(self, name, age, gender):
print('子子类Grandson的init调用--->开始')
# 多继承时,相对于使用类名.__init__方法,要把每个父类全部写一遍
# 而super只用一句话,执行了全部父类的方法,这也是为何多继承需要全部传参的一个原因
# super(Grander, self).__init__(name, age, gender)
super().__init__(name, age, gender) # 单独调用父类的初始化方法
print('子子类Grandson的init调用--->结束')
print(Grandson.__mro__) # 打印的是谁super就按顺序调用谁。python解释器C3算法
gs = Grandson('grandson', 12, '男')
print('姓名:', gs.name)
print('年龄:', gs.age)
print('性别:', gs.gender)
执行结果: