日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)Python教程:Python小白必學的面向對象

我們已經(jīng)知道在Python中“一切皆對象”,每個對象都有特定的類型,現(xiàn)在讓我們來嘗試創(chuàng)建自己的類型——這需要使用class關鍵字來定義新的“類”(Class),類是用來生成對象的“模板”,對象則是其所屬類的“實例”——以下是在交互模式中自定義Thing類,并調用其默認構造器生成一個Thing類的實例對象(注意:自定義類的命名規(guī)范要求單詞首字母大寫):

公司主營業(yè)務:網(wǎng)站建設、成都網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出臨城免費做網(wǎng)站回饋大家。

In [1]: class Thing:
   ...:     """最簡單的自定義類"""
   ...: 

In [2]: type(Thing)
Out[2]: type

In [3]: t = Thing()

In [4]: type(t)
Out[4]: __main__.Thing

可以看到,Thing對象屬于type類型,是type類的一個實例;t對象屬于Thing類型,是Thing類的一個實例——當你在程序中定義自己的類來生成實例對象,就算是“面向對象編程”(Object-Oriented Programming,簡稱OOP)。面向對象的編程方式使用類來模擬和組織現(xiàn)實世界的事物,可以令程序結構更靈活、條理更清晰。

上面定義的Thing類所生成的實例對象并不能做什么事情,讓我們再來創(chuàng)建一個包含了具體子語句的“船”類并生成兩個“船”對象:

In [5]: class Ship:
   ...:     """船類"""
   ...:     def __init__(self, name=None):
   ...:         """初始化船實例"""
   ...:         self.name = name  # 船名
   ...:         self.crew = 0  # 船員人數(shù)
   ...:     def join(self, number):
   ...:         """船員加入"""
   ...:         self.crew += number
   ...:         return self.crew
   ...:     

In [6]: s1 = Ship("鄭和")

In [7]: s1.crew = 200

In [8]: s2 = Ship("戚繼光")

In [9]: s2.join(100)
Out[9]: 100

In [10]: s2.crew
Out[10]: 100

Ship類定義了一個特殊的“初始化”方法__init__,這樣就能在調用構造器生成實例時加入新的實例“屬性”(Property),所謂實例屬性就是實例對象的“成員變量”,例如Ship類的實例增加了name和crew屬性——從現(xiàn)實概念來理解,任何船都有船名和船員人數(shù)這兩個數(shù)據(jù),但每艘船又有各自的具體數(shù)據(jù)值。實例屬性和實例方法是最常見的兩種類成員,Python規(guī)定特殊類成員名以兩個下劃線開始和結束,其他類成員名遵循標準的變量命名規(guī)范,注意這里有一個細節(jié)概念:作為類成員的__init__屬于函數(shù),作為實例成員的__init__則屬于方法,在類中定義函數(shù)時約定首個參數(shù)為“self”,它會指向所生成的實例對象以便操作其成員,對應的實例方法則無此參數(shù),所以調用Ship構造器時只需傳入一個參數(shù)(也可以不傳入任何參數(shù),因為name指定了默認值)。除了實例屬性,你也可以定義新的實例方法,讓實例能夠做更多的事情——例如“船”類還有一個“船員加入”方法。

In [11]: help(Ship)
Help on class Ship in module __main__:

class Ship(builtins.object)
 |  船類
 |  
 |  Methods defined here:
 |  
 |  __init__(self, name=None)
 |      初始化船實例
 |  
 |  join(self, number)
 |      船員加入
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |  
 |  __dict__
 |      dictionary for instance variables (if defined)
 |  
 |  __weakref__
 |      list of weak references to the object (if defined)


In [12]: type(Ship.__init__)
Out[12]: function

In [13]: type(s2.__init__)
Out[13]: method

In [14]: s1.__dict__
Out[14]: {'crew': 200, 'name': '鄭和'}

實例對象之所以擁有不必自定義而默認存在的特殊成員,是因為面向對象編程的一個重要特性“繼承”(Inheritance)——使用繼承機制能夠將復雜的系統(tǒng)有機地組織起來,所有類都是同一個龐大家族的成員——定義類時可以在類名后加括號指定“基類”,新類將成為其“子類”;如果不指定基類,就默認為最基本的“object”類的子類。子類會繼承基類的現(xiàn)有成員,子類定義屬性和方法時如果與基類成員同名,就會“覆蓋”基類成員。例如下面的程序定義了“船”類及其子類“戰(zhàn)艦”類:

"""ship.py 船的家族"""


class Ship:
    """船類"""
    def __init__(self, name=None):
        """初始化船實例"""
        self.name = name  # 船名
        self.crew = 0  # 船員人數(shù)

    def join(self, number):
        """船員加入"""
        self.crew += number
        return self.crew


class Warship(Ship):
    """戰(zhàn)艦類"""
    def __init__(self, name=None, level=None):
        super().__init__(name)  # 先調用基類初始化方法
        self.level = level  # 艦級


if __name__ == "__main__":
    ws1 = Warship("藍色空間", "恒星級")
    ws1.join(500)
    print("{}戰(zhàn)艦{}號,現(xiàn)有艦員{}人。".format(ws1.level, ws1.name, ws1.crew))

可以注意到Warship類重新定義了__init__,這就會覆蓋Ship類中的__init__,所以先調用基類的__init__才能繼承到基類定義的實例屬性name和crew。

接下來的示例是一個簡單的計算器:

"""tkcalc.pyw 簡單的計算器
"""
import tkinter as tk


class Calc(tk.Tk):
    """計算器窗體類"""
    def __init__(self):
        """初始化實例"""
        tk.Tk.__init__(self)
        self.title("計算器")
        self.memory = 0  # 暫存數(shù)值
        self.create()

    def create(self):
        """創(chuàng)建界面"""
        btn_list = ["C", "M->", "->M", "/",
                    "7", "8", "9", "*",
                    "4", "5", "6", "-",
                    "1", "2", "3", "+",
                    "+/-", "0", ".", "="]
        r = 1
        c = 0
        for b in btn_list:
            self.button = tk.Button(self, text=b, width=5,
                                    command=(lambda x=b: self.click(x)))
            self.button.grid(row=r, column=c, padx=3, pady=6)
            c += 1
            if c > 3:
                c = 0
                r += 1
        self.entry = tk.Entry(self, width=24, borderwidth=2,
                              bg="yellow", font=("Consolas", 12))
        self.entry.grid(row=0, column=0, columnspan=4, padx=8, pady=6)

    def click(self, key):
        """響應按鈕"""
        if key == "=":  # 輸出結果
            result = eval(self.entry.get())
            self.entry.insert(tk.END, " = " + str(result))
        elif key == "C":  # 清空輸入框
            self.entry.delete(0, tk.END)
        elif key == "->M":  # 存入數(shù)值
            self.memory = self.entry.get()
            if "=" in self.memory:
                ix = self.memory.find("=")
                self.memory = self.memory[ix + 2:]
            self.title("M=" + self.memory)
        elif key == "M->":  # 取出數(shù)值
            if self.memory:
                self.entry.insert(tk.END, self.memory)
        elif key == "+/-":  # 正負翻轉
            if "=" in self.entry.get():
                self.entry.delete(0, tk.END)
            elif self.entry.get()[0] == "-":
                self.entry.delete(0)
            else:
                self.entry.insert(0, "-")
        else:  # 其他鍵
            if "=" in self.entry.get():
                self.entry.delete(0, tk.END)
            self.entry.insert(tk.END, key)


if __name__ == "__main__":
    Calc().mainloop()

分享題目:創(chuàng)新互聯(lián)Python教程:Python小白必學的面向對象
本文網(wǎng)址:http://www.5511xx.com/article/coohoeo.html