一、參考博文: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)
執行結果: