面向對象1

来源:http://www.cnblogs.com/flags-blog/archive/2017/11/19/7859457.html
-Advertisement-
Play Games

面向對象概念 面向對象是利用類和對象來創建各種模型對真實世界進行描述,也能使程式變得簡單。 class 類 一個類即對一類擁有相同屬性的對象的抽象。其中類定義了這些對象都具備非屬性以及方法。 object 對象 一個對象即是一個類的實例化後的實例,一個類必須經過實例化後才能在程式中調用,一個類可以有 ...


面向對象概念

面向對象是利用類和對象來創建各種模型對真實世界進行描述,也能使程式變得簡單。

class 類

一個類即對一類擁有相同屬性的對象的抽象。其中類定義了這些對象都具備非屬性以及方法。

object 對象

一個對象即是一個類的實例化後的實例,一個類必須經過實例化後才能在程式中調用,一個類可以有多個屬性,每個對象也可以有不同的屬性

encapsulation 封裝

在類中對數據的賦值、內部調用對外部用戶是透明的,這使類變成了一個容器,裡面包含著類的屬性以及方法。

防止數據被隨意修改

使外部程式不需要關註對象內部結構,只需要通過對象對外提供的介面進行直接訪問即可

inheritance 繼承

一個類可以派生出子類,在這個類里定義的屬性、方法自動被子類繼承

通過父類->子類的方式以最小編碼實現不同角色的不同點與共同點

polymorphism 多態

一個基類中派生出不同的子類,且每個子類在繼承同樣方法名的同時對父類的方法做了不同的實現,就是同一種事物表現出的多種狀態。

 

定義類和對象

類的定義

 1 class person(object):  
 2 #person類名,object是固定格式
 3     def __init__(self,name):  
 4 #類的構造函數,對象的參數都由此處傳入。self表示是對象自身
 5         self.name = name
 6 
 7     def hello(self):   
 8 #由於self等於對象自身,而構造函數已經將所有參數傳給self了。所以類的方法可以直接調用類的屬性。不會出現構造函數的局部不按量不能被其它方法訪問
 9         print("hello world,i'm %s"%self.name)
10 
11 obj1 = person('zsq') #類的實例,即對象
12 obj1.hello() #對象調用方法

 

類的私有屬性

對象的屬性保存在對象內,對象的方法保存在類裡面。類似於下麵介紹的類的公有屬性

 1 __author__ = 'zhang'
 2 
 3 class person(object): 
 4     def __init__(self,name):        
       self.name = name 5 self.__heart = 'normal' #私有屬性,對象不可調用。 類的方法可以進行調用,進行操作即外部不能調用,內部可以調用 6 def hello(self): 7 print("hello world,i'm %s"%self.name) 8 9 def get_heart(self): #訪問私有屬性的方法,讓外部能訪問但不能修改 10 return self.__heart 11 12 obj1 = person('zsq') 13 obj1.hello() 14 print(obj1.get_heart())#通過類的方法訪問私有屬性 15 print(obj1._person__heart) #強制訪問私有屬性

 

類的公有屬性

對象的公有屬性預設是引用類裡面的,當通過對象操作公有屬性其實是在對象本地新建一個與公有屬性同名的變數而已,與原來的公有屬性沒有任何關係。只不過訪問時候先在本地尋找對應的變數名,找不到再去類中尋找而已。  刪除對象自己的公有屬性其公有屬性會恢復到類裡面公有屬性的值。

 1 class person(object):
 2     nationality = "CHINA"
 3     def __init__(self,name):
 4         self.name = name
 5 
 6 obj1 = person('zsq')
 7 obj2 = person('zsq1')
 8 print(obj1.nationality)
 9 print(obj2.nationality)
10 print('-------------')
11 person.nationality = "CN"
12 print(obj1.nationality)
13 print(obj2.nationality)
14 obj1.nationality = "USA"
15 print('-------------')
16 print(obj1.nationality)
17 print(obj2.nationality)
18 print('-------------')
19 del obj1.nationality
20 print(obj1.nationality)
21 print(obj2.nationality)

將類方法修改為私有方法

 1 class person(object):
 2     nationality = "CHINA"
 3     def __init__(self,name):
 4         self.name = name
 5     def get_name(self):
 6         print("get name is %s"%self.name)
 7 
 8 obj1 = person('zsq')
 9 obj2 = person('zsq1')
10 
11 def get_name2(self):
12     print("this is private fun get name %s"%self.name)
13 obj2.get_name = get_name2
14 obj1.get_name()
15 obj2.get_name(obj2)

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、前言 surging內部使用的是高性能RPC遠程服務調用,如果用json.net序列化肯定性能上達不到最優,所以後面擴展了protobuf,messagepack序列化組件,以支持RPC二進位傳輸. 在這裡需要感謝白紙無字Zonciu,新增了messagepack序列化,讓surging 性能上 ...
  • 1、 在表單需要提交Html的頁面頭部加入 ValidateRequest="false" 2、webConfig 的 <system.web> 節點下配置 ...
  • 前言 c#做winform程式要求生成並列印Excel報告,為了不安裝Office相應組件,我選擇了NPOI來生成Excel報告,用winform的PrintDocument控制項來觸發列印操作,而難點在於如何將excel轉換成Graphics對象,在NPOI中我只找到了excel列印的設置(如橫向/ ...
  • 關於Oracle中使用Entity Framework 6.x Code-First方式開發,請參考博客(菩提樹下的楊過)https://www.cnblogs.com/yjmyzz/p/how-to-use-code-first-in-oracle-with-entity-framework-6. ...
  • 一、背景介紹 環境的局限性: 用戶在使用XX客戶端的時候,必須每臺電腦都安裝列印組件,同時由於XX客戶端使用的是 websocket進行通訊,這就必須限制用戶的電腦瀏覽器必須是IE10.0+以上版本,這種局限性在我們公司倉庫部署實施和用戶體驗極其不好。因此我們必須提供一種解決方案,解決我們業務痛點。 ...
  • 返回總目錄 6.4Replace Temp with Query(以查詢取代臨時變數) 概要 你的程式以一個臨時變數保存某一表達式的運算結果。 將這個表達式提煉到一個獨立函數中。將這個臨時變數的所有引用點替換為對函數的調用。此後,新函數就可以被其他函數使用。 動機 臨時變數的問題在於:只在當前函數可 ...
  • 初稿:2017-11-19 13:05:57 4種鏈表 鏈表和數組的區別 數組初始容量一旦確定,不能再改變,適合要處理的數據量已知的情況。 未知要處理的數據量使用數組,可能造成空間浪費或容量不足,雖然有動態數組可擴容,但是頻繁擴容會使系統產生很大的開銷。 鏈表容量不限,長度與元素個數相同,但是需要額 ...
  • hasattr(object, name)判斷一個對象裡面是否有name屬性或者name方法,返回BOOL值,有name特性返回True, 否則返回False。需要註意的是name要用括弧括起來 getattr(object, name[,default])獲取對象object的屬性或者方法,如果存 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...