溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用python怎么實現一個子類調用父類的構造函數

發布時間:2021-04-13 18:04:06 來源:億速云 閱讀:274 作者:Leah 欄目:開發技術

使用python怎么實現一個子類調用父類的構造函數?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

當子類繼承父類后,需要調用父類的方法和屬性時,需要調用父類的初始化函數。

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()

在子類中重寫了構造函數,但新的構造函數沒有初始化父類,當沒有初始化父類的構造函數時,就會報錯。

使用python怎么實現一個子類調用父類的構造函數

(1)調用超類的構造方法

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()

使用python怎么實現一個子類調用父類的構造函數

(2)使用super函數

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()

使用python怎么實現一個子類調用父類的構造函數

super函數返回一個super對象,解析過程自動查找所有的父類和父類的父類,當前類和對象可以作為super函數的參數使用,調用函數返回的方法是超類的方法。使用super函數如果子類繼承多個父類只許一次繼承,使用一次super函數即可。

如果沒有重寫子類的構造函數,是可以直接使用父類的屬性和方法的。

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)

使用python怎么實現一個子類調用父類的構造函數

補充知識:python3 和python2 調用父類構造方法寫法區別

1. python3 和python2 調用父類構造方法寫法區別

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

發現了很多不同的地方.我這里簡單說明了,構造方法的不同 之后可能會繼續更新不同. 主要針對項目遷移進行總結,反思. 這里就當做筆記.

python3 代碼 調用父類的構造方法

#!/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 調用父類的構造方法

#!/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)

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女