在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ 五、類的繼承
二、Enum 的源碼
前言
一、Python 模塊簡介
一、List(列表)
五、匿名函數
三、什么是元類
二、循環(huán)語句
二、模塊的使用
三、第一個 Python 程序
線程與進程
Python
三、條件語句和循環(huán)語句綜合實例
四、對象的描述器
三、類的屬性
一、迭代
五、迭代器和生成器綜合例子
六、運算符相關的魔術方法
一、枚舉類的使用
前言
一、簡明概述
二、Python 的基本數據類型
多線程編程
五、作用域
四、包
四、枚舉的比較
四、Python 中的變量
六、類的多態(tài)
一、Python 中類也是對象
一、Python 的 Magic Method
前言
四、生成器
一、面向對象的概念
五、類的繼承
二、類
二、使用 <code>type()</code> 動態(tài)創(chuàng)建類
進程
二、set
三、主模塊和非主模塊
一、字典(Dictionary)
前言
前言
前言
前言
四、集成開發(fā)環(huán)境(IDE): PyCharm
前言
四、函數的參數
三、lsit 生成式(列表生成式)
四、自定義元類
四、類的方法
二、函數傳值問題
二、注釋
一、條件語句
一、Python 語法的簡要說明
三、函數返回值
三、基本數據類型轉換
三、屬性的訪問控制
二、Python 的安裝
前言
三、命名規(guī)范
一、Python 自定義函數的基本步驟
三、自定義類型的枚舉
五、自定義容器(Container)
二、Python 迭代器
前言
二、tuple(元組)
一、Python 簡介
前言
前言
前言
二、構造(<code>__new__</code>)和初始化(<code>__init__</code>)
前言

五、類的繼承

1、定義類的繼承

首先我們來看下類的繼承的基本語法:

class ClassName(BaseClassName):
    <statement-1>
    .
    .
    .
    <statement-N>

在定義類的時候,可以在括號里寫繼承的類,一開始也提到過,如果不用繼承類的時候,也要寫繼承 object 類,因為在 Python 中 object 類是一切類的父類。

當然上面的是單繼承,Python 也是支持多繼承的,具體的語法如下:

class ClassName(Base1,Base2,Base3):
    <statement-1>
    .
    .
    .
    <statement-N>

多繼承有一點需要注意的:若是父類中有相同的方法名,而在子類使用時未指定,python 在圓括號中父類的順序,從左至右搜索 , 即方法在子類中未找到時,從左到右查找父類中是否包含方法。

那么繼承的子類可以干什么呢?

繼承的子類的好處:

  • 會繼承父類的屬性和方法
  • 可以自己定義,覆蓋父類的屬性和方法

2、調用父類的方法

一個類繼承了父類后,可以直接調用父類的方法的,比如下面的例子,UserInfo2 繼承自父類 UserInfo ,可以直接調用父類的 get_account 方法。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

class UserInfo(object):
    lv = 5

    def __init__(self, name, age, account):
        self.name = name
        self._age = age
        self.__account = account

    def get_account(self):
        return self.__account

class UserInfo2(UserInfo):
    pass

if __name__ == '__main__':
    userInfo2 = UserInfo2('兩點水', 23, 347073565);
    print(userInfo2.get_account())

3、父類方法的重寫

當然,也可以重寫父類的方法。

示例:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

class UserInfo(object):
    lv = 5

    def __init__(self, name, age, account):
        self.name = name
        self._age = age
        self.__account = account

    def get_account(self):
        return self.__account

    @classmethod
    def get_name(cls):
        return cls.lv

    @property
    def get_age(self):
        return self._age

class UserInfo2(UserInfo):
    def __init__(self, name, age, account, sex):
        super(UserInfo2, self).__init__(name, age, account)
        self.sex = sex;

if __name__ == '__main__':
    userInfo2 = UserInfo2('兩點水', 23, 347073565, '男');
    # 打印所有屬性
    print(dir(userInfo2))
    # 打印構造函數中的屬性
    print(userInfo2.__dict__)
    print(UserInfo2.get_name())

最后打印的結果:

Python 類的繼承

這里就是重寫了父類的構造函數。

3、子類的類型判斷

對于 class 的繼承關系來說,有些時候我們需要判斷 class 的類型,該怎么辦呢?

可以使用 isinstance() 函數,

一個例子就能看懂 isinstance() 函數的用法了。

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

class User1(object):
    pass

class User2(User1):
    pass

class User3(User2):
    pass

if __name__ == '__main__':
    user1 = User1()
    user2 = User2()
    user3 = User3()
    # isinstance()就可以告訴我們,一個對象是否是某種類型
    print(isinstance(user3, User2))
    print(isinstance(user3, User1))
    print(isinstance(user3, User3))
    # 基本類型也可以用isinstance()判斷
    print(isinstance('兩點水', str))
    print(isinstance(347073565, int))
    print(isinstance(347073565, str))

輸出的結果如下:

True
True
True
True
True
False

可以看到 isinstance() 不僅可以告訴我們,一個對象是否是某種類型,也可以用于基本類型的判斷。

上一篇:前言下一篇:一、Python 模塊簡介