1. 程式人生 > >python中子類例項化呼叫父類方法

python中子類例項化呼叫父類方法

面向物件的核心為物件,物件是由類例項化而來的,那麼類與類之間存在一個繼承的關係,被繼承的類叫做父類,繼承了父類的類為子類。

子類繼承了父類,那麼子類例項化的物件就可以呼叫所有父類的方法,當然也可以呼叫子類自身所有的方法。因為這些方法都屬於該物件的方法。

比如,子類child繼承了父類father

child.py

from father import father
class child(father):
    def childprint(self):
        print "this is a child"

father.py

class father:
    def common(self):
        print "this is a father also common"

那麼當子類的一個例項test = child()可以呼叫父類的common()方法,如下所示:

third.py

from child import child
test = child()
test.common()

則執行third.py的結果為:


但如果我們將father.py的檔案做如下修改:

father.py

class father:
    def common(self):
        print "this is a father also common"
        self.childprint()


則執行的結果如下:


可以看到,“this is a child”也被列印了。很明顯我們子類的一個例項呼叫了父類的common方法,而該方法里居然呼叫了子類的childprint方法。這是怎麼回事?

事實是這樣子的,前面說過,子類例項化後,所有子類繼承的父類的方法以及子類自身的方法都歸該例項所有,那麼此時的common方法自然是屬於子類剛才例項化的物件,

所有自然可以在common方法中呼叫子類的childprint方法。表面上看是父類呼叫子類方法,其實還是子類例項呼叫自己的方法。self.childprint()中的self指的就是子類例項。

相關推薦

python中子例項呼叫方法

面向物件的核心為物件,物件是由類例項化而來的,那麼類與類之間存在一個繼承的關係,被繼承的類叫做父類,繼承了父類的類為子類。 子類繼承了父類,那麼子類例項化的物件就可以呼叫所有父類的方法,當然也可以呼叫子類自身所有的方法。因為這些方法都屬於該物件的方法。 比如,子類child

在C++中子繼承和呼叫的建構函式方法

構造方法用來初始化類的物件,與父類的其它成員不同,它不能被子類繼承(子類可以繼承父類所有的成員變數和成員方法,但不繼承父類的構造方法)。因此,在建立子類物件時,為了初始化從父類繼承來的資料成員,系統需要呼叫其父類的構造方法。 如果沒有顯式的建構函式

構造器呼叫構造器的順序問題

一 super呼叫父類構造器 子類構造器總會呼叫父類構造器。 如果子類構造器沒有顯示使用super呼叫父類構造器,子類構造器預設會呼叫父類無參構造器。 建立一個子類例項時,總會呼叫最頂層父類構造器。 二 構造器呼叫順序示例 1 程式碼示例 class Creature { public Creature(

繼承和呼叫的構造方法

1. 如果子類沒有定義構造方法,則呼叫父類的無引數的構造方法,. 2. 如果子類定義了構造方法,不論是無引數還是帶引數,在建立子類的物件的時候,首先執行父類無引數的構造方法,然後執行自己的構造方法。 3. 如果子類呼叫父類帶引數的構造方法,可以通過super(引數)呼叫所需

繼承,重寫方法,運用多型時呼叫重寫的方法呼叫的還是呼叫的?

package 第五天; public class Person { public void say() { System.out.println("我是Person的say方法"); } } 子類Student如下: package 第五天; publ

python3 繼承 在子中如何呼叫中的方法

繼承 兩種在子類呼叫父類函式的方法: 一、使用未繫結子類的父類的方法,要傳入子類的物件,即self A.func(self) 二、使用super()呼叫 super().func()

Java中建立子例項時會建立例項

不會 構建一個物件時,jvm會在堆中給物件分配空間。這些空間用來儲存當前物件例項屬性以及其父類的例項屬性(這些屬性都是從方法區中

Python中子呼叫的初始方法

轉自:https://blog.csdn.net/feishicheng/article/details/79596000 Python中子類呼叫父類的初始化方法 前言 python中進行面向物件程式設計,當在子類的例項中呼叫父類的屬性時,由於子類的__init__方法重寫了父類的__init_

Java為什麼在例項的物件時,會先呼叫的構造器

1、為什麼在例項化子類的物件時,會先呼叫父類的構造器? 答:子類繼承父類後,獲取到父類的屬性和方法,這些屬性和方法在使用前必須先初始化,所以須先呼叫父類的構造器進行初始化 2、在哪裡呼叫父類的構造器? 答:在子類構造器的第一行會隱式的呼叫 super();,即呼叫父

Python中子怎樣呼叫方法

前面相關文章提過,python中類的初始化方法是__init__(),因此父類子類的初始化方法都是這個,如果子類不實現這個函式,初始化時呼叫父類的初始化函式,如果子類實現這個函式,就覆蓋了父類的這個函式,既然繼承父類,就要在這個函式裡顯式呼叫一下父類的__init__(),

python中子呼叫構造方法

python和其他面嚮物件語言類似,每個類可以擁有一個或者多個父類,它們從父類那裡繼承了屬性和方法。如果一個方法在子類的例項中被呼叫,或者一個屬性在子類的例項中被訪問,但是該方法或屬性在子類中並不存在,那麼就會自動的去其父類中進行查詢。 繼承父類後,就能呼叫父類方法和訪

繼承----super 呼叫的相同方法(python)

如果一個子類繼承多個父類,然後呼叫父類的相同的方法,使用__mro__ 可以檢視查詢次序 在python 中 有這樣的機制,如果之前一個父類中的方法呼叫過了,下一次就會繼續往下找,而不是重複呼叫 例項: class A: @classmethod

C++中子呼叫的有參建構函式

 轉自:https://blog.csdn.net/sddyljsx/article/details/9156055 參考: https://blog.csdn.net/qq_36846891/article/details/69666437 //java中子類構造與父類

Python與物件技巧(1):字串格式化、封裝屬性名、可管理的屬性、呼叫方法

1. 自定義字串的格式化 _formats = { 'ymd' : '{d.year}-{d.month}-{d.day}', 'mdy' : '{d.month}/{d.day}/{d.year}', 'dmy' : '{d.day}/{d.month}/{d.ye

少說話多寫程式碼之Python學習047——的成員(呼叫建構函式)

前面我們知道了在Python中如何繼承。我們看下面的繼承關係,Bird類有一個eat方法。BigBird繼承了Bird,並且新增了sing方法。 class Bird:     def __init__(self):        

Python的繼承以及呼叫成員:super用法

python子類呼叫父類成員有2種方法,分別是普通方法和super方法 假設Base是基類 class Base(object): def __init__(self): print “Base init” 則普通方法如下 class Lea

python基礎之呼叫方法

方法一: >>> class cat(object):#父類 def eat(self): print("the cats love fishes") >>> class BlackCat(cat):#子類 def eat(self): cat.

java中宣告子例項

問題: 1、比如兩個類父類:Person 子類 Student extends Person在使用時候,這樣寫:Person person=null; //宣告物件person=new Student(); //建立物件這樣看來 宣告的時候,是父類,而在產生物件的時候,實際的物件是子類。怎麼理解

python使用super()呼叫方法

如果要在子類中引用父類的方法,但是又需要新增一些子類所特有的內容,可通過類名.方法()和super()來呼叫父類的方法,再個性化子類的對應函式。 直接使用類名.方法()來呼叫時,還是需要傳入self為第一個引數,而使用super()呼叫則python自動將self傳入,因此使用super()比較簡潔。 如

C++中的預設建構函式和初始列表和子呼叫建構函式

預設建構函式:未提供顯式初始值時,用來建立物件的建構函式。 class testClass { public:     testClass();