class a(object):
def show(self):
print("我是a類")
class b(object):
def show_info(self):
print("我是b類")
def show(self):
print("我是b類")
class c(b,a):
pass
c=c()
c.show()
c.show_info()
# 我是b類
# 我是b類
在python 裡面方法的呼叫會遵循mro,類繼承順序
print(c.mro())
[, , , ]
重寫:子類繼承父類,父類的方法滿足不了子類的需要可以對父類的方法進行重寫
重寫特點:繼承關係 方法名相同
class person(object):
def run(self):
print("跑起來了")
class student(person):
def __init__(self,name,age):
self.name=name
self.age=age
# 因為父類的方法滿足不了子類的需要,對其進行重寫
# 呼叫的時候先重本類找,如果本類沒有,就去父類去找
def run(self):
print("%s 跑起來了"% self.name)
stu=student(" 王五 ",109)
stu.run()
class animal (object):
def run(self):
print("動物跑起來了")
class dog(animal):
def wang(self):
# 再次呼叫父類的方法 比如呼叫run方法
# 1. self ,前提當前類沒有父類的方法
self.run()
#2. 使用父類的類名,需要傳入例項物件
animal.run(self)
#super 呼叫父類的方法
super(dog, self).run()
#檢視類繼承順序
print(self.__class__.mro())
#根據指定類,在類繼承鏈中獲取下乙個類
# 1.dog 表示根據指定類找類繼承鏈中獲取下乙個類
# 2.self 表示self物件所對應類的類繼承鏈
# 3. super 不一定是你直接繼承的父類
# 單繼承直接理解成繼承父類i沒有問題,多繼承有可能不是
# super 呼叫的是父類的方法,但是不一定是你直接繼承父類的方法
print("wang")
dog1=dog()
dog1.wang()
dog1.run()
# 動物跑起來了
# wang
python類分為兩種,一種叫經典類,一種叫新式類。兩種都支援多繼承。
考慮一種情形,b繼承於a,c繼承於a和b, 但c需要呼叫父類的init()函式時,前者會導致父類a的init()函式被呼叫2次,這是不希望看到的。而且子類要顯式地指定父類,不符合dry原則。
# 經典類
class a(
): def __init__(self):
print (
'a')
class b(a):
def __init__(self):
a.__init__(self)
print (
'b')
class c(b, a):
def __init__(self):
a.__init__(self)
b.__init__(self)
print (
'c')
採用新式類,要求最頂層的父類一定要繼承於object,這樣就可以利用super()函式來呼叫父類的init()等函式,每個父類都執行且執行一次,並不會出現重複呼叫的情況。而且在子類的實現中,不用到處寫出所有的父類名字,符合dry原則。
# 新式類
class a(object):
def __init__(self):
print (
'a')
class b(a):
def __init__(self):
super(b, self).__init__(
) print (
'b')
class c(b, a):
def __init__(self):
super(c, self).__init__(
) print (
'c')
採用super()方式時,會自動找到第乙個多繼承中的第乙個父類,但是如果還想強制呼叫其他父類的init()函式或兩個父類的同名函式時,就要用老辦法了。
#!/usr/bin/python
class person(object):
name =
"" *** =
"" def __init__(self, name, ***=
'u'):
print (
'person'
) self.name=name
self.***=***
class consumer(object):
def __init__(self):
print (
'consumer'
)
class student(person, consumer):
def __init__(self, score,name):
print(self.__class__.mro(
)) super(student, self).__init__(name, ***=
'f')
consumer.__init__(self)
self.score=score
s1 = student(90, 'abc'
)print (s1.name, s1.score, s1.***)
Python 函式的使用
def test name,age 20 age可以預設 print name str age test name c age 30 test a 傳入元組,引數隨便寫,將引數全部封裝到元組中 def tup tupl print tupl tup x s c 限制引數的傳入,預設讀取第乙個,後面的...
Python 函式的使用
函式 function 函式的概念 如果乙個功能在程式設計中可能反覆被使用,則可以將這個功能封裝成乙個函式。函式的分類 1,系統函式 2,自定義函式 函式的定義 任何函式都是先定義在使用 def 自定義函式 引數 實現功能的 使用函式的好處 1,封裝性更好,降低 的耦合性 2,更方便維護 函式的呼叫...
python函式怎麼使用 python函式的使用
函式形參和實參 函式取得的引數是你提供給函式的值,這樣函式就可以利用這些值 做 一些事情。這些引數就像變數一樣,只不過它們的值是在我們呼叫函式的時候定義的,而非在函式本身內賦值。引數在函式定義的圓括號對內指定,用逗號分割。當我們呼叫函式的時候,我們以同樣的方式提供值。注意我們使用過的術語 函式中的引...