Python3 與 C# 面向物件之~繼承與多型
Python的多繼承最好是當C#或者Java裡面的介面使用,這樣結構不會混亂( 特殊情況除外)
來個例子:
class Animal(object): pass class Flyable(object): """飛的方法""" pass class Runable(object): """跑的方法""" pass class Dog(Animal, Runable): pass class Cat(Animal, Runable): pass class Bird(Animal, Flyable): pass class Dack(Animal, Runable, Flyable): """鴨子會飛也會跑""" pass
和C#一樣,Python的 父類建構函式不會被繼承
其實從資源角度也不應該被繼承,如果有1w個子類,那每個子類裡面都有一個父類方法,想想這是多麼浪費的一件事情?
2.3.C#繼承 ¶
下課後,小明認真思考總結,然後對照Python寫下了C#版的繼承:
定義一個人類
public class Person { public string Name { get; set; } publicushort Age { get; set; } public Person(string name, ushort age) { this.Name = name; this.Age = age; } public void Hi()//People { Console.WriteLine("Name: " + this.Name + " Age: " + this.Age); } public virtual void Show()//People { Console.WriteLine("Name: " + this.Name + " Age: " + this.Age); } }
定義一個學生類
public class Student : Person { #region 屬性 /// <summary> /// 學校 /// </summary> public string School { get; set; } /// <summary> /// 班級 /// </summary> public string StrClass { get; set; } /// <summary> /// 學號 /// </summary> public string StrNum { get; set; } #endregion #region 建構函式 /// <summary> /// 呼叫父類建構函式 /// </summary> /// <param name="name"></param> /// <param name="age"></param> public Student(string name, ushort age) : base(name, age) { } public Student(string name, ushort age, string school, string strClass, string strNum) : this(name, age) { this.School = school; this.StrClass = strClass; this.StrNum = strNum; } #endregion /// <summary> /// new-隱藏 /// </summary> public new void Hi()//Student { Console.WriteLine("Name: " + this.Name + " Age: " + this.Age + " School: " + this.School + " strClass: " + this.StrClass + " strNum: " + this.StrNum); } /// <summary> /// override-覆蓋 /// </summary> public override void Show()//Student { Console.WriteLine("Name: " + this.Name + " Age: " + this.Age + " School: " + this.School + " strClass: " + this.StrClass + " strNum: " + this.StrNum); } }
呼叫一下:
Person p = new Student("app", 10, "北京大學", "001", "01001"); p.Hi(); p.Show(); Console.WriteLine(); Student s = p as Student; s.Hi(); s.Show();
結果:
Name: app Age: 10
Name: app Age: 10 School: 北京大學 strClass: 001 strNum: 01001
Name: app Age: 10 School: 北京大學 strClass: 001 strNum: 01001
Name: app Age: 10 School: 北京大學 strClass: 001 strNum: 01001
2.4C#介面的多實現 ¶
定義兩個介面:
public interface IRun { //什麼都不用加 void Run(); } public interface IEat { void Eat(); }
定義一個Dog類來實現兩個介面,這樣dog就有了run和eat的方法了
var dog = new Dog(); dog.Eat(); dog.Run();
結果:
狗狗吃
狗狗跑
3 多型 ¶
3.1.Python ¶
說多型之前說說型別判斷,以前我們用 type()
or isinstance()
判斷一個變數和另一個變數是否是同一個型別==> type(a)==type(b)
判斷一個變數是否是某個型別==> type(a)==A
or isinstance(a,A)
相關推薦
Python3 與 C# 面向物件之~繼承與多型
Python的多繼承最好是當C#或者Java裡面的介面使用,這樣結構不會混亂( 特殊情況除外) 來個例子: class Animal(object): pass class Flyable(object): """飛的方法""" pass class Ru
Python3 與 C# 面向物件之~封裝
關於__name__在模組呼叫的時候會詳細說,你可以先這樣理解:如果直接執行py檔案就執行,別人呼叫那麼你的main就不執行了 標準寫法: # 1.匯入的模組 # 2.class的定義 # 3.其他方法定義 def main(): pass if __name__ ==
Python3 與 C# 面向物件之~異常相關
老師問了小明一聲,有幾個輸出? 小明驕傲的說道:“兩個,我寫了兩個異常處理,當然都執行了” 同學們又笑了,小潘調侃的說了句:“一看就知道去年C#沒好好學,這不都一樣嘛,遇到異常下面程式碼還執行嗎?用腦子好好想想” 當我們認為某些程式碼可能會出錯時,就可以用try來執行這段程式碼,如果執行出錯,則後續
c++面向物件程式設計3 繼承與派生 多型
1.繼承:程式碼重用 派生:程式碼的改造 public繼承: 基類的public和protected成員做子類的public和protected成員,而基類的private成員不可直接訪問;基類public成員,子類可以通過子類內部訪問該成員,也可以通過子類物件(類
面向物件封裝、繼承、多型
多型(Polymorphism):意味著可以對不同類的物件使用相同的操作。 封裝(Encapsulation): 即對外部世界隱藏物件的工作細節。 繼承(Inheritance): 以通用的類為基礎建立專門的類物件。 1.封裝 顧名思義就是將內容
面向物件——封裝、繼承、多型
封裝 概念:將類的某些資訊隱藏在類的內部,不允許外部程式直接訪問,而是直接通過該類提供的方法來實現對隱藏資訊的操作與訪問 好處: a. 只能通規定的方法訪問資料 b. 隱藏類的例項細節,方便
Python3 與 C# 網路程式設計之~ 網路基礎篇
最新版本檢視:https://www.cnblogs.com/dotnetcrazy/p/9919202.html 入門篇 官方文件:https://docs.python.org/3/library/ipc.html(程序間通訊和網路) 例項程式碼:https://github.com/lotapp/
c#面向物件之繼承(經驗)
假設有一個基類A,另外有個繼承A的子類B,當建立物件a時===A a = new B();a.PrintObj();=== 用a去呼叫方法PrintObj(),在方法內部會出異常;因為dtObj沒有被例項化;如果去掉A的無參建構函式裡的 註釋,呼叫正確;子類呼叫父類方法,方法類用到的物件必須
Python3 與 C# 併發程式設計之~ 執行緒上篇
2.2.加強篇¶ 其實以前的Linux中是沒有執行緒這個概念的,Windows程式設計師經常使用執行緒,這一看~方便啊,然後可能是當時程式設計師偷懶了,就把程序模組改了改(這就是為什麼之前說Linux下的多程序程式設計其實沒有Win下那麼“重量級”),弄了個精簡版程序==>執行緒(核心是分不出程序
Python3 與 C# 併發程式設計之~程序先導篇
2.2.殭屍程序和孤兒程序¶ 先看看定義: 孤兒程序 :一個父程序退出,而它的一個或多個子程序還在執行,那麼那些子程序將成為孤兒程序。孤兒程序將被init程序(程序號為1)所收養,並由init程序對它們完成狀態收集工作。 殭屍程序 :一個程序使用fork建立子程序,如果子程序退出,而父程序並沒有
Python3 與 C# 併發程式設計之~ 程序篇
NetCore併發程式設計¶ Python的執行緒、並行、協程下次說 先簡單說下概念(其實之前也有說,所以簡說下): 併發:同時做多件事情 多執行緒:併發的一種形式 並行處理:多執行緒的一種(執行緒池產生的一種併發型別,eg:非同步程式設計) 響應式程式設計:一種程式設計模式,對事件
面向物件之_繼承概念
1,如果多個類具有相同的屬性和行為,我們可以抽取出共性的內容定義父類,這時再建立相似的類時只要繼承父類即可。 子類擁有父類的所有屬性與方法,無需重新定義。並且可以直接使用非私有的父類成員。 從邏輯關係來看,子類必須屬於父類的一種時,才應該繼承,且在原有基礎上進行功能擴充套件。
PHP面向物件之方法重寫與過載
直接程式碼:class father{ public function test(){ echo "father"; } public function tes
C++面向物件的程式設計——繼承
首先讓我們瞭解一個面向物件程式設計的4個主要特點:抽象,封裝,繼承和多型。其中繼承性和派生性是面向物件程式設計的兩個重要特性。 1.什麼是繼承: 在C++中繼承就是在一個已存在類的基礎上建立一個新類,然後新類可以從已有類那裡獲得它已有的特性。 繼承可以提高程
go語言-面向物件之結構體與方法(十)
go語言僅支援封裝,不支援繼承和多型type node struct { value int left *node right *node } var root node root = node{value:1} //root := node{value:1} r
python面向物件學習(五)多型
多型 多型:不同的 子類物件 呼叫相同的 父類方法,產生不同的執行結果 多型 可以 增加程式碼的靈活度 以 繼承 和 重寫父類方法 為前提 是呼叫方法的技巧,不會影響到類的內部設計 多型案例練習 需求 在 Dog 類中封裝方法 game 普通狗只是簡單的玩耍
python中的面向物件學習以及類的多型
接下來類的第三個重要的特性:多型(一種介面,多種實現) 多型性(polymorphisn)是允許你將父物件設定成為和一個或更多的他的子物件相等的技術,賦值之後,父物件就可以根據當前賦值給它的子物件的特性以不同的方式運作。簡單的說,就是一句話:允許將子類型別的指標賦值給父類型別的指標。
初識面向物件三(經典類/多型/鴨子型別/初識封裝)
py2中的經典類 coding:utf-8 class D: pass # def func(self): # print('d')class B(D): pass # def func(self): # print('b')class C(D):
Java第十天學習筆記~面向物件(介面應用、多型)
介面的應用 暴露的規則 使用規則 實現規則 這些裝置和電腦的耦合性降低了 interface USB //暴露的 規則 { public void open(); public void close(); } class BookPC
C語言實現封裝、繼承和多型
雖然C語言一直被稱為面向過程的設計語言,但是通過使用C語言函式指標和結構體的特性,還是能夠使用C語言實現類似面向物件的封裝、繼承和多型的概念。 下面對原始碼進行分析: validator.h檔案 首先提取了所有校驗器都有的校驗方法,定義了一個校驗器抽象類Validato