python函式的使用

2021-10-08 19:39:27 字數 3207 閱讀 7143

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函式的使用

函式形參和實參 函式取得的引數是你提供給函式的值,這樣函式就可以利用這些值 做 一些事情。這些引數就像變數一樣,只不過它們的值是在我們呼叫函式的時候定義的,而非在函式本身內賦值。引數在函式定義的圓括號對內指定,用逗號分割。當我們呼叫函式的時候,我們以同樣的方式提供值。注意我們使用過的術語 函式中的引...