- (繼承)
1. 什麼是繼承?
在程式中繼承是一種新建子類的方式,新建立的類稱之為子類\派生類,被繼承的類稱之為父類\基類\超類
繼承描述的是一種遺傳關係,子類可以重用父類的屬性 -
- 2. 為何用繼承?
減少類與類之間程式碼冗餘的問題 -
- 3. 如何繼承
先抽象再繼承
- 在python中繼承的特點?單繼承&多繼承
class Parent1(object):
pass -
- class Parent2:
pass -
- class Sub1(Parent1): #單繼承
pass -
- class Sub2(Parent1,Parent2): #多繼承
pass -
- print(Sub1.__bases__)
print(Sub2.__bases__) -
- print(Parent1.__bases__)
print(Parent2.__bases__) -
- x=2
class Foo:
# x=1
pass
obj=Foo()
# obj.x=3
print(obj.x) -
- python2與python3在繼承上的區別
新式類:但凡繼承object類的子類,以及該子類的子子類,...都稱之為新式類
經典類:沒有繼承object類的子類,以及該子類的子子類,...都稱之為經典類 -
- 只有在python2中才區分新式類與經典類
-
- # 在子類派生出的新功能中如何重用父類的功能:
# 方式一: 指名道姓地訪問某一個類中的函式,與繼承無關
# 方式二: super(OldboyTeacher,self),在python3中super可以不傳引數,呼叫該函式會得到一個特殊的物件,該物件是專門用來訪問父類中屬性,
# 強調:super會嚴格參照類的mro列表依次查詢屬性
# class OldboyPeople:
# school = 'Oldboy'
# def __init__(self, name, age, gender):
# self.name = name
# self.age = age
# self.gender = gender
#
# class OldboyTeacher(OldboyPeople):
# # tea, 'egon', 18, 'male', 10, 3000
# def __init__(self, name, age, gender,level,salary):
# OldboyPeople.__init__(self, name, age, gender)
# # super(OldboyTeacher,self).__init__(name, age, gender)
#
# self.level=level
# self.salary=salary
#
# def score(self,stu,num):
# stu.num=num
# print('老師%s給學生%s打分%s' %(self.name,stu.name,num))
#
# tea=OldboyTeacher('egon',18,'male',10,3000) #__init___(tea,'egon',18,'male',10,3000)
# print(tea.__dict__)
# # print(stu.school) -
- #A沒有繼承B,
class A:
def test(self):
print('A.test')
super().test()
class B:
def test(self):
print('from B')
class C(A,B):
pass -
- c=C()
c.test()
print(C.mro())