Python類和人類

来源:http://www.cnblogs.com/gengcx/archive/2017/07/31/7266126.html
-Advertisement-
Play Games

Python中的類 俗話說,物以類聚,人以群分,類是什麼,類就是一組相同屬性的集合。下麵來結合人,探討Python中類和人類的關係。 首先,我們定義一個人的類,如下: 上面代碼中,我們定義了一個人的類,人都有姓名,年齡,性別,血型等屬性,還有說話,學習,走路等方法;並且我們創建了兩個人,一男一女," ...


Python中的類

    俗話說,物以類聚,人以群分,類是什麼,類就是一組相同屬性的集合。下麵來結合人,探討Python中類和人類的關係。

    首先,我們定義一個人的類,如下:

class People(object):
    '''創建人類'''

    def __init__(self,name,age,sex,blood_type):
        """人具有姓名,年齡,性別,血型的屬性"""
        self.name = name
        self.age = age
        self.sex = sex
        self.blood_type = blood_type
        
    def walk(self):
        '''創建走路方法'''
        print("%s can walk!!!!" %self.name)
        
    def speak(self):
        """創建說話的屬性"""
        print("%s can speak!!" %self.name)
        
    def learn(self):
        '''創建學習的屬性'''
        print("%s is learning." %self.name)


p1 = People("wupeiqi",18,"","0")
p2 = People("Alex",8,"","AB")

    上面代碼中,我們定義了一個人的類,人都有姓名,年齡,性別,血型等屬性,還有說話,學習,走路等方法;並且我們創建了兩個人,一男一女,"Wupeiqi"和"Alex",下麵我們來一步一步完善這兩個人。

    我們知道,男人有喉結,女人會生小孩,這兩個是男,女的區別,也是各自獨有的屬性。那麼給"wupeiqi"和"Alex"添加這種屬性。如下:

class People(object):
    '''創建人類'''

    def __init__(self,name,age,sex,blood_type):
        """人具有姓名,年齡,性別,血型的屬性"""
        self.name = name
        self.age = age
        self.sex = sex
        self.blood_type = blood_type

    def walk(self):
        '''創建走路方法'''
        print("%s can walk!!!!" %self.name)

    def speak(self):
        """創建說話的屬性"""
        print("%s can speak!!" %self.name)

    def learn(self):
        '''創建學習的屬性'''
        print("%s is learning." %self.name)


p1 = People("wupeiqi",18,"","0")
p2 = People("Alex",8,"","AB")
p1.birth = "Woman can give birth to a baby"    #給女人添加生孩子功能
p2.adam = "Man has Adam's apple"               #給男人添加喉結屬性

    我們知道,男人和女人都有學習的功能,我們人類自己有人會說英語,有人會說日語,總之各種各樣的語言,這些是個體所具有的屬性,比如"wupeiqi"會說日語,"Alex"會說英語,我們來實現一下:

class People(object):
    '''創建人類'''

    def __init__(self,name,age,sex,blood_type):
        """人具有姓名,年齡,性別,血型的屬性"""
        self.name = name
        self.age = age
        self.sex = sex
        self.blood_type = blood_type

    def walk(self):
        '''創建走路方法'''
        print("%s can walk!!!!" %self.name)

    def speak(self):
        """創建說話的屬性"""
        print("%s can speak!!" %self.name)

    def learn(self):
        '''創建學習的屬性'''
        print("%s is learning." %self.name)


p1 = People("wupeiqi",18,"","0")
p2 = People("Alex",8,"","AB")
p1.birth = "Woman can give birth to a baby"    #給女人添加生孩子功能
p2.adam = "Man has Adam's apple"               #給男人添加喉結屬性
p1.language1 = "Japanese"
p2.language2 = "English"

print("{0} is can speak {1}".format(p1.name,p1.language1))   #列印wupeiqi說的語言
print("{0} is can speak {1}".format(p2.name,p2.language2))   #列印ALex說的語言
print("%s is can speak %s" %(p1.name,p1.language2))          #看wupeiqi是否會說英語
print("%s is can speak %s" %(p2.name,p2.language1))          #查看Alex是否會說日語   主要是看語言能力能否交叉
運行結果如下:
wupeiqi is can speak Japanese
Alex is can speak English
Traceback (most recent call last):
  File "/home/zhuzhu/第七天/人類.py", line 33, in <module>
    print("%s is can speak %s" %(p1.name,p1.language2))          #看wupeiqi是否會說英語
AttributeError: 'People' object has no attribute 'language2'

    從上面代碼可以看出,"wupeiqi"會說日語,但是"Alex"不具有"wupeiqi"的能力。這就像我們人類一樣,你具備的能力,別人是不一定具備的,別人具備的能力,你也是不一定有的。類就像人類世界一樣。我們可以創建屬性,不一樣的能力,共有的能力。再比如,我們知道,我們都會說話,但是有些人生病了,或者天生有缺陷,不具備這種能力,我們可以拿走這些能力,如下:

   

class People(object):
    '''創建人類'''

    def __init__(self,name,age,sex,blood_type):
        """人具有姓名,年齡,性別,血型的屬性"""
        self.name = name
        self.age = age
        self.sex = sex
        self.blood_type = blood_type

    def walk(self):
        '''創建走路方法'''
        print("%s can walk!!!!" %self.name)

    def speak(self):
        """創建說話的屬性"""
        print("%s can speak!!" %self.name)

    def learn(self):
        '''創建學習的屬性'''
        print("%s is learning." %self.name)


p1 = People("wupeiqi",18,"","0")
p2 = People("Alex",8,"","AB")
p1.walk()
p2.walk()
運行如下:
wupeiqi can walk!!!!
Alex can walk!!!!

    上面代碼中,我們可以看出,本來Alex和wupeiqi都會跑,現在突然出現一點小情況,Alex不會跑了(當然這隻是假設),如下:

class People(object):
    '''創建人類'''

    def __init__(self,name,age,sex,blood_type):
        """人具有姓名,年齡,性別,血型的屬性"""
        self.name = name
        self.age = age
        self.sex = sex
        self.blood_type = blood_type

    def walk(self):
        '''創建走路方法'''
        print("%s can walk!!!!" %self.name)

    def speak(self):
        """創建說話的屬性"""
        print("%s can speak!!" %self.name)

    def learn(self):
        '''創建學習的屬性'''
        print("%s is learning." %self.name)


p1 = People("wupeiqi",18,"","0")
p2 = People("Alex",8,"","AB")
print(People.walk,"     ",p1.walk)
p1.walk()
p2.walk()

del People.walk

# try:
#     delattr(p2,"walk")
# except AttributeError:
#     print("方法不能刪除嗎!!!!?")

p1.walk()
p2.walk()
運行結果如下:
wupeiqi can walk!!!!
Alex can walk!!!!
Traceback (most recent call last):
  File "/home/zhuzhu/第七天/人類.py", line 37, in <module>
    p1.walk()
AttributeError: 'People' object has no attribute 'walk'

    從上面代碼可以看出,創建的實例是不能刪除類中的方法的,類中的方法不支持刪除,下麵來看看對類中的屬性進行操作:

    我們讓"wupeiqi"成為無名氏,如下:

class People(object):
    '''創建人類'''

    def __init__(self,name,age,sex,blood_type):
        """人具有姓名,年齡,性別,血型的屬性"""
        self.name = name
        self.age = age
        self.sex = sex
        self.blood_type = blood_type

    def walk(self):
        '''創建走路方法'''
        print("%s can walk!!!!" %self.name)

    def speak(self):
        """創建說話的屬性"""
        print("%s can speak!!" %self.name)

    def learn(self):
        '''創建學習的屬性'''
        print("%s is learning." %self.name)


p1 = People("wupeiqi",18,"","0")
p2 = People("Alex",8,"","AB")
print(p1.name,p2.name)

del p1.name
print(p1.name,p2.name)
運行結果如下:
wupeiqi Alex
Traceback (most recent call last):
  File "/home/zhuzhu/第七天/人類.py", line 29, in <module>
    print(p1.name,p2.name)
AttributeError: 'People' object has no attribute 'name'

    從上面運行結果可以看出,我們刪除了類中的屬性,即屬性是可以修改和刪除的,我們讓"wupeiqi"成為了無名氏,不在具有名字了。

    從上面可以看出,類中,我們只能修改和刪除類的屬性,不能刪除類的方法。

    類和人類是一樣的,都是封裝一個大致的屬性,可以創建無數個個體,每個個體都有自己獨特的屬性,我們可以通過添加屬性進行添加,也會有很多不同的技能和方法。我們都能夠實現類中個體實例的完善。

    就如我們人類自己一樣,我們缺少某個屬性,我們可以通過自己的努力去獲取。

    類就是對現實生活世界的描述。

class People(object):
    '''創建人類'''

    def __init__(self,name,age,sex,blood_type):
        """人具有姓名,年齡,性別,血型的屬性"""
        self.name = name
        self.age = age
        self.sex = sex
        self.blood_type = blood_type


    def write(self,write_abality=False):
        '''創建寫作的能力,不是每個人都具有寫作的功能,所以需要進行判斷'''
        if write_abality == False:
            print("Sorry,%s is a illiteracy,so %s cann't have the ability of writing!" %(self.name,self.name))
        elif write_abality == True:
            print("%s is a professional in an and literature,%s can write!" %(self.name,self.name))
        else:
            print("Sorry,cann't identify the parameter of %s." %write_abality)

    def walk(self):
        print("%s can walking!")


p1 = People("Alex",18,"Female","AB")
p1.write("Alex")

 

    我們知道,有些人會寫,有些人不會寫,所以我們要進行判斷,判斷這個人是否具有寫這個屬性,如果有,就能夠寫;如果沒有,就不具備。因而要加上一個判斷。這樣就能查看是否具有寫的功能。

    現實世界很多東西需要我們去學習,現在對類的掌握還不是很徹底,尤其是不知道如何描述現實世界,這個還需要自己去積累。

 


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

-Advertisement-
Play Games
更多相關文章
  • IdentityServer4 是一個提供 認證服務,單點登錄/登出(SSO),API訪問控制,聯合認證通道的可定製、免費商業支持的框架。 ...
  • 非同步非常重要的一點就是不會使當前線程阻塞,C#主要通過委托機制來實現非同步編程。 ...
  • 公司的核心業務合作伙伴淘寶網,最近出現泄漏用戶信息的現象,找了好久找不到根源,於是乎,淘寶那邊決定對所有敏感數據進行加密,從出口和入口都走密文,於是乎,我們的工作量就來了。 我們的一個底單資料庫,存儲了大量淘寶賣家和買家的訂單列印,申請單號,發貨,回收單號等等操作的日誌,大概有10億左右數據(自動刪 ...
  • 考慮使用靜態工廠方法代替構造器 類可以提供一個公有的靜態工廠方法(public static factory method)來返回一個類的實例。例如,Boolean類的valueOf()方法: public static Boolean valueOf(boolean b) { return (b ...
  • 1. 心得體會 1.1 線程 寫代碼時,需要至少考慮兩個問題:UI線程與子線程。 UI線程:主要處理UI線程的事情(這不是廢話嗎?) 子線程:主要做網路連接、回調、文件IO等操作。 備註:UI線程不能夠被阻塞,不然會有ANR問題。 1.2 界面 寫代碼時,不要貪圖方便在xml中用一個ViewPage ...
  • JSP製作簡單登陸界面 運行環境 eclipse+tomcat+MySQL 不知道的可以參考Jsp運行環境——Tomcat 項目列表 這裡我先把jsp文件先放在Web-INF外面訪問 代碼演示: index.jsp就好像一般網站的首頁一樣感覺,將header.jsp和footer.jsp引入其中 h ...
  • Map數據結構的使用 ...
  • 3295: [Cqoi2011]動態逆序對 Description 對於序列A,它的逆序對數定義為滿足i<j,且Ai>Aj的數對(i,j)的個數。 給1到n的一個排列,按照某種順序依次刪除m個元素。 你的任務是在每次刪除一個元素之前統計整個序列的逆序對數。 對於序列A,它的逆序對數定義為滿足i<j, ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...