首頁 > 歷史

Python繼承

作者:由 統計小黑馬 發表于 歷史日期:2022-08-05

什麼是python繼承

Python繼承

今天是14天,學習內容為單繼承和多繼承的基本語法

一,繼承

面向物件三大特性:繼承、多型和封裝

繼承分為單繼承和多繼承

1,單繼承

如下定義了c和p兩個類,c類繼承了p類,也就是c是子類,p是父類,檢視c的屬性,包含屬性p

>>> class p:

。。。 p=2

。。。

>>> class c(p):

。。。 pass

。。。

>>> dir(c)

[‘__class__’, ‘__delattr__’, ‘__dict__’, ‘__dir__’, ‘__doc__’, ‘__eq__’,

‘__format__’, ‘__ge__’, ‘__getattribute__’, ‘__gt__’, ‘__hash__’,

‘__init__’, ‘__init_subclass__’, ‘__le__’, ‘__lt__’, ‘__module__’, ‘__ne__’,

‘__new__’, ‘__reduce__’, ‘__reduce_ex__’, ‘__repr__’, ‘__setattr__’,

‘__sizeof__’, ‘__str__’, ‘__subclasshook__’, ‘__weakref__’, ‘p’]

>>> p。p

2

>>> c。p

2

查詢父類的方法__base__

>>> c。__base__

例項

class P:

def __init__(self,name,age):

self。name=name

self。age=age

def get_name(self):

return self。name

def get_age(self):

return self。age

class S(P):

def __init__(self,school,name,age):

self。school=school

P。__init__(self,name,age)

#super()。__init__(name,age)

def grade(self,n):

print(‘{name} is {n} grade {school}’。format(name=self。name,n=n,school=self。school))

st1=S(‘211 university’,‘zhangsan’,24)

st1。grade(2)

print(st1。get_name())

print(st1。get_age())

注意:如果子類有與父類同名稱的方法時,會覆蓋父類的方法,如上例子類和父類都有初始化方法,

則父類的方法被覆蓋,如仍然需要使用父類方法,則需要增加語句P.__init__(self, )或者

super().__init__()

2,多繼承:

一個子類對應多個父類的現象

例項:繼承父母的染色體,並判斷孩子性別

import random

class F:

def __init__(self):

self。father=‘xy’

def f_do(self):

print(‘make money’)

class M:

def __init__(self):

self。mother=‘xx’

def m_do(self):

print(‘manage money’)

class C(F,M):

def __init__(self):

F。__init__(self)

M。__init__(self)

def c_g(self):

fat=random。choice(self。father)

mot=random。choice(self。mother)

print(‘father:’,fat,‘mother:’,mot)

chi=fat+mot

if ‘y’in chi:

return 1

return 0

p=C()

if p。c_g():

print(‘Boy’)

else:

print(‘girl’)

輸出

father: y mother: x

Boy