什麼是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