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

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

五、類(lèi)的繼承

1、定義類(lèi)的繼承

首先我們來(lái)看下類(lèi)的繼承的基本語(yǔ)法:

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

在定義類(lèi)的時(shí)候,可以在括號(hào)里寫(xiě)繼承的類(lèi),一開(kāi)始也提到過(guò),如果不用繼承類(lèi)的時(shí)候,也要寫(xiě)繼承 object 類(lèi),因?yàn)樵?Python 中 object 類(lèi)是一切類(lèi)的父類(lèi)。

當(dāng)然上面的是單繼承,Python 也是支持多繼承的,具體的語(yǔ)法如下:

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

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

那么繼承的子類(lèi)可以干什么呢?

繼承的子類(lèi)的好處:

  • 會(huì)繼承父類(lèi)的屬性和方法
  • 可以自己定義,覆蓋父類(lèi)的屬性和方法

2、調(diào)用父類(lèi)的方法

一個(gè)類(lèi)繼承了父類(lèi)后,可以直接調(diào)用父類(lèi)的方法的,比如下面的例子,UserInfo2 繼承自父類(lèi) UserInfo ,可以直接調(diào)用父類(lèi)的 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('兩點(diǎn)水', 23, 347073565);
    print(userInfo2.get_account())

3、父類(lèi)方法的重寫(xiě)

當(dāng)然,也可以重寫(xiě)父類(lèi)的方法。

示例:

#!/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('兩點(diǎn)水', 23, 347073565, '男');
    # 打印所有屬性
    print(dir(userInfo2))
    # 打印構(gòu)造函數(shù)中的屬性
    print(userInfo2.__dict__)
    print(UserInfo2.get_name())

最后打印的結(jié)果:

Python 類(lèi)的繼承

這里就是重寫(xiě)了父類(lèi)的構(gòu)造函數(shù)。

3、子類(lèi)的類(lèi)型判斷

對(duì)于 class 的繼承關(guān)系來(lái)說(shuō),有些時(shí)候我們需要判斷 class 的類(lèi)型,該怎么辦呢?

可以使用 isinstance() 函數(shù),

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

#!/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()就可以告訴我們,一個(gè)對(duì)象是否是某種類(lèi)型
    print(isinstance(user3, User2))
    print(isinstance(user3, User1))
    print(isinstance(user3, User3))
    # 基本類(lèi)型也可以用isinstance()判斷
    print(isinstance('兩點(diǎn)水', str))
    print(isinstance(347073565, int))
    print(isinstance(347073565, str))

輸出的結(jié)果如下:

True
True
True
True
True
False

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