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

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

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

當子類繼承父類后,需要調(diào)用父類的方法和屬性時,需要調(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ù)沒有初始化父類,當沒有初始化父類的構(gòu)造函數(shù)時,就會報錯。

(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ù)返回一個super對象,解析過程自動查找所有的父類和父類的父類,當前類和對象可以作為super函數(shù)的參數(shù)使用,調(diào)用函數(shù)返回的方法是超類的方法。使用super函數(shù)如果子類繼承多個父類只許一次繼承,使用一次super函數(shù)即可。

如果沒有重寫子類的構(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)

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

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

前一段時間,把之前的一個項目遷移到python3

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

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):
  """
  消費者線程類
  """
 
  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):
  """
  消費者線程類
  """
 
  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(), 需要傳兩個參數(shù)一個是類名, 一個是self. 這樣比較麻煩,很容易混淆. 但是python3 這里處理的比較好了.

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

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

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

相關文章

  • python自動化測試之破解圖文驗證碼

    python自動化測試之破解圖文驗證碼

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

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

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

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

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

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

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

    python 如何將字典寫為json文件

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

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

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

    通過實例淺析Python對比C語言的編程思想差異

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

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

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

    利用python進行接口測試及類型介紹

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

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

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

最新評論