1. 程式人生 > 實用技巧 >Python3筆記039 - 7.5 繼承

Python3筆記039 - 7.5 繼承

第7章 面向物件程式設計

  • 7.1 面向物件概述
  • 7.2 類的定義
  • 7.3 類的例項化
  • 7.4 訪問限制
  • 7.5 繼承
  • 7.6 封裝
  • 7.7 多型
  • 7.8 裝飾器
  • 7.9 特殊方法

7.5 繼承

我們每一個人都從祖輩和父母那裡繼承了一些體貌特徵,但是每個人卻又不同於父母,因為每個人都存在自己的一些特性,這些特性是獨有的,在父母身上並沒有體現。

class ClassName(baseclasslist):
    '''類的幫助資訊'''
    statement
引數說明
baseclasslist:要繼承的基類,可以有多個,用逗號分隔,不指定,將繼承object類
baseclasslist稱為基類或父類,ClassName稱為派生類或子類
# 單繼承例項:子類Student繼承父類People
# 父類定義
class People:

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def speak(self):
        print("%s 說: 我 %d 歲。" % (self.name, self.age))

# 子類定義,既沒定義屬性也沒定義方法
class Student(People):  # People父類名,Student是子類名
    pass
s = Student('John', 10) # Student類例項化
s.speak()  # 呼叫父類的speak方法
output:
John 說: 我 10 歲。

python 3的繼承機制

  • 子類在呼叫某個方法或變數的時候,首先在自己內部查詢,如果沒有找到,則開始根據繼承機制在父類裡查詢。

  • 根據父類定義的順序,以深度優先的方式逐一查詢父類,Python會從左至右搜尋父類中是否包含該方法。一旦查詢到則直接呼叫,後面不再繼續查詢。!

# 多繼承例項:

class People:

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def speak(self):
        print("People類的speak方法")


class Teacher:

    def __init__(self, grade):
        # 呼叫父類的例項化方法
        self.grade = grade

    def speak(self):
        print("Teacher類的speak方法")


class Student(People, Teacher):

    def __init__(self, name, age, grade, sex):
        # 呼叫父類的例項化方法
        People.__init__(self, name, age)
        Teacher.__init__(self, grade)
        self.sex = sex

    def speak(self):
        print(self.name, self.age, self.grade, self.sex)


s = Student('John', 10, 30, "male")
s.speak()
output:
John 10 30 male
# 拓展:所有物件之根,object就所有類的祖先,都預設繼承object類
o = object()
print(type(o))
output:
<class 'object'>
# 拓展:父子關係鑑定
# 父類定義
class People(object):  # object是父類名,People是子類名
    pass
# 子類定義
class Student(People):  # People父類名,Student是子類名
    pass

print(issubclass(Student, People))
print(issubclass(People, object))

output:
True
True