欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python 子類調(diào)用父類的構(gòu)造函數(shù)實(shí)例

 更新時(shí)間:2020年03月12日 10:25:39   作者:homle  
這篇文章主要介紹了python 子類調(diào)用父類的構(gòu)造函數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

當(dāng)子類繼承父類后,需要調(diào)用父類的方法和屬性時(shí),需要調(diào)用父類的初始化函數(shù)。

class A(object):
  def __init__(self):
    self.nameaa = 'aa'
  def funca(self):
    print('function a %s' % self.nameaa)
    
class B(A):
  def __init__(self):
    self.namebb = 'bb'
   def funcb(self):
    print('function b %s' % self.namebb)
    
b = B()
print(b.namebb)
b.funcb()
print(b.nameaa)
b.funca()

在子類中重寫了構(gòu)造函數(shù),但新的構(gòu)造函數(shù)沒(méi)有初始化父類,當(dāng)沒(méi)有初始化父類的構(gòu)造函數(shù)時(shí),就會(huì)報(bào)錯(cuò)。

(1)調(diào)用超類的構(gòu)造方法

class A(object):
  def __init__(self):
    self.nameaa = 'aa'
  def funca(self):
    print('function a %s' % self.nameaa)
    
class B(A):
  def __init__(self):
    self.namebb = 'bb'
    A.__init__(self)    #添加
  def funcb(self):
    print('function b %s' % self.namebb)
    
b = B()
print(b.namebb)
b.funcb()
print(b.nameaa)
b.funca()

(2)使用super函數(shù)

class A(object):
  def __init__(self):
    self.nameaa = 'aa'
  def funca(self):
    print('function a %s' % self.nameaa)
    
class B(A):
  def __init__(self):
    self.namebb = 'bb'
    super(B,self).__init__()
  def funcb(self):
    print('function b %s' % self.namebb)
    
b = B()
print(b.namebb)
b.funcb()
print(b.nameaa)
b.funca()

super函數(shù)返回一個(gè)super對(duì)象,解析過(guò)程自動(dòng)查找所有的父類和父類的父類,當(dāng)前類和對(duì)象可以作為super函數(shù)的參數(shù)使用,調(diào)用函數(shù)返回的方法是超類的方法。使用super函數(shù)如果子類繼承多個(gè)父類只許一次繼承,使用一次super函數(shù)即可。

如果沒(méi)有重寫子類的構(gòu)造函數(shù),是可以直接使用父類的屬性和方法的。

class A(object):
  def __init__(self):
    self.nameaa = 'aa'
  def funca(self):
    print('function a %s' % self.nameaa)
    
class C(A):
  pass
c = C()
c.funca()
print(c.nameaa)

補(bǔ)充知識(shí):python3 和python2 調(diào)用父類構(gòu)造方法寫法區(qū)別

1. python3 和python2 調(diào)用父類構(gòu)造方法寫法區(qū)別

前一段時(shí)間,把之前的一個(gè)項(xiàng)目遷移到python3

發(fā)現(xiàn)了很多不同的地方.我這里簡(jiǎn)單說(shuō)明了,構(gòu)造方法的不同 之后可能會(huì)繼續(xù)更新不同. 主要針對(duì)項(xiàng)目遷移進(jìn)行總結(jié),反思. 這里就當(dāng)做筆記.

python3 代碼 調(diào)用父類的構(gòu)造方法

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@author: Frank 
@contact: frank.chang@shoufuyou.com
@file: py2topy3.py
@time: 2018/7/7 上午7:09
## python3 代碼 
 
"""
 
import threading
import queue
 
_sentinel = object()
 
 
class Consumer(threading.Thread):
  """
  消費(fèi)者線程類
  """
 
  def __init__(self, name, queue):
    super().__init__(name=name)
    self.queue = queue
 
  def run(self):
    while True:
      values = self.queue.get(timeout=None)
 
      if values is _sentinel:
        self.queue.put(values)
        break
      ##process values
      ##xxx
      print('consume is consuming data {}'.format(values))
 
    print("{} finished".format(self.getName()))
 
 
if __name__ == '__main__':
  q = queue.Queue()
  concumser = Consumer('consumer', q)
 
  print(concumser)

2 python2.7 調(diào)用父類的構(gòu)造方法

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@author: Frank 
@contact: frank.chang@shoufuyou.com
@file: 3.py
@time: 2018/7/7 上午7:05
"""
 
import Queue
import threading
 
# 哨兵
_sentinel = object()
 
 
class Consumer(threading.Thread):
  """
  消費(fèi)者線程類
  """
 
  def __init__(self, name, queue):
    super(Consumer, self).__init__(name=name)
    self.queue = queue
 
  def run(self):
    while True:
      values = self.queue.get(timeout=None)
 
      if values is _sentinel:
        self.queue.put(values)
        break
      ##process values
      ##xxx
      print('consume is consuming data {}'.format(values))
 
    print("{} finished".format(self.getName()))
 
 
if __name__ == '__main__':
  q = Queue.Queue()
  concumser = Consumer('consumer', q)
  print(concumser)

區(qū)別

主要區(qū)別是 super 的變化,

python3 中直接 super().init() 中 super 不需要傳遞任何參數(shù),直接可以調(diào)用父類的構(gòu)造方法

python2 中 super(Consumer, self).init(), 需要傳兩個(gè)參數(shù)一個(gè)是類名, 一個(gè)是self. 這樣比較麻煩,很容易混淆. 但是python3 這里處理的比較好了.

可以看下這個(gè)文檔 https://docs.python.org/3/library/functions.html#super

順便提一下, python2 和python3 中 quque 名稱換了,python3 用的是小寫 作為模塊名稱.

以上這篇python 子類調(diào)用父類的構(gòu)造函數(shù)實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python自動(dòng)化測(cè)試之破解圖文驗(yàn)證碼

    python自動(dòng)化測(cè)試之破解圖文驗(yàn)證碼

    這篇文章介紹了python自動(dòng)化測(cè)試之破解圖文驗(yàn)證碼的解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Django部署到服務(wù)器后無(wú)法獲取到靜態(tài)元素 The requested resource was not found on this server(問(wèn)題及解決方案)

    Django部署到服務(wù)器后無(wú)法獲取到靜態(tài)元素 The requested resource

    寫了一個(gè)Django項(xiàng)目,部署到云主機(jī)后,訪問(wèn)發(fā)現(xiàn)圖片無(wú)法訪問(wèn),報(bào)錯(cuò)The requested resource was not found on this server,下面給大家介紹Django部署到服務(wù)器后無(wú)法獲取到靜態(tài)元素The requested resource was not found on this server(問(wèn)題及解決方案),需要的朋友可以參考下
    2024-02-02
  • Python3利用Qt5實(shí)現(xiàn)簡(jiǎn)易的五子棋游戲

    Python3利用Qt5實(shí)現(xiàn)簡(jiǎn)易的五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了Python3利用Qt5實(shí)現(xiàn)簡(jiǎn)易的五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Python的條件鎖與事件共享詳解

    Python的條件鎖與事件共享詳解

    這篇文章主要介紹了Python的條件鎖與事件共享詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • python 如何將字典寫為json文件

    python 如何將字典寫為json文件

    這篇文章主要介紹了python 如何將字典寫為json文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • KMP算法精解及其Python版的代碼示例

    KMP算法精解及其Python版的代碼示例

    KMP算法基本上被人們用作字符串的匹配操作,這里我們就來(lái)介紹KMP算法精解及其Python版的代碼示例,需要的朋友可以參考下
    2016-06-06
  • 通過(guò)實(shí)例淺析Python對(duì)比C語(yǔ)言的編程思想差異

    通過(guò)實(shí)例淺析Python對(duì)比C語(yǔ)言的編程思想差異

    這篇文章主要介紹了通過(guò)實(shí)例淺析Python對(duì)比C語(yǔ)言的編程思想差異,作為面向?qū)ο蠛兔嫦蜻^(guò)程的編程語(yǔ)言代表,二者的對(duì)比可謂經(jīng)典,需要的朋友可以參考下
    2015-08-08
  • Python中使用scapy模擬數(shù)據(jù)包實(shí)現(xiàn)arp攻擊、dns放大攻擊例子

    Python中使用scapy模擬數(shù)據(jù)包實(shí)現(xiàn)arp攻擊、dns放大攻擊例子

    這篇文章主要介紹了Python中使用scapy模擬數(shù)據(jù)包實(shí)現(xiàn)arp攻擊、dns放大攻擊例子,本文重點(diǎn)在于scapy有使用上,需要的朋友可以參考下
    2014-10-10
  • 利用python進(jìn)行接口測(cè)試及類型介紹

    利用python進(jìn)行接口測(cè)試及類型介紹

    這篇文章主要介紹了利用python進(jìn)行接口測(cè)試詳情,文章基于python展開對(duì)接口測(cè)試的詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • python提取xml里面的鏈接源碼詳解

    python提取xml里面的鏈接源碼詳解

    在本篇文章里小編給大家整理的是關(guān)于python提取xml里面的鏈接的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2019-10-10

最新評(píng)論