程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> python 3快速入門之模塊化和類

python 3快速入門之模塊化和類

編輯:更多關於編程

       首先引用官方的一段話

      Python 展現了“瑞士軍刀”的哲學。 這可以通過它更大的包的高級和健壯的功能來得到最好的展現。

      例如:

      xmlrpc.client 和 xmlrpc.server 模塊讓遠程過程調用變得輕而易舉。 盡管模塊有這樣的名字, 用

      戶無需擁有 XML 的知識或處理 XML。 ? email 包是一個管理郵件信息的庫,包括 MIME 和其它基於

      RFC 2822 的信息文檔。 不同 於實際發送和接收信息的 smtplib 和 poplib 模塊, email 包包含一

      個構造或解析復雜消息 結構(包括附件)及實現互聯網編碼和頭協議的完整工具集。 xml.dom 和

      xml.sax 包為流行的信息交換格式提供了強大的支持。同樣, csv 模塊支持在通 用數據庫格式中直接

      讀寫。綜合起來,這些模塊和包大大簡化了 Python 應用程序和其它 工具之間的數據交換。 國際化

      由 gettext , locale 和 codecs 包支持。

      這就是python的優點之一

      上節討論了基礎的一些東西和入門,這裡開始講一些和其他語言類似的地方

      這個時候為了比較方便,我們利用vs2012,安裝插件的方法在上一篇文件中已經提到過。

      一、 模塊化

      畢竟代碼是需要保存的,而且模塊化編程也是非常重要的,所以需要把文件保存在不同的地方,尤其是不同的文件夾,在這裡展示一下建立的文件結構

      復制代碼

      #Projrct1.py

      import test1

      print("test1.count do there")

      print(test1.__name__)

      a=test1.count(1,2,3)

      print(a)

      import NewFolder1.test2

      print('newfolder1.test2.count do there ')

      print(NewFolder1.test2.__name__)

      a=NewFolder1.test2.count(1,2,3)

      print(a)

      print(dir(test1))

      print(dir(NewFolder1.test2))

      復制代碼

      #test1.py

      def count(a,b,c):

      return a+b-c

      #test2

      def count(a,b,c):

      return a+b+c

      #__init__.py

      print('use a folder!')

      首先我們可以通過右擊.py文件的辦法,來設置啟動文件。

      我們可以使用import關鍵字來調用其他模塊文件

      解釋一下__init__文件,如果你想調用一個文件夾的文件,那個文件夾裡必須有這麼一個文件,調用文件之前,必須用這個文件來進行初始化,就是執行,當然裡面空著也無所謂

      內置函數 dir() 用於按模塊名搜索模塊定義,它返回一個字符串類型的存儲列表:

      執行順序非常明顯,我們可以發現.py文件中雖然我們只看到了一個函數,實際上裡面有很多預定義的變量,比如__name__,就是指這個文件名。

      二、作用域和類

      Python和c++在類方面有一定關聯,下面還是引用官方的一段話

      Python 的類機制通過最小的新語法和語義在語言中實現了類。 它是 C++何 Modula-3 語言中類 機制的混合。 就像模塊一樣,Python 的類並沒有在用戶和定義之間設立絕對的屏障,而是依賴 於用戶不去“強行闖入定義”的優雅。 另一方面,類的大多數重要特性都被完整的保留下來:類繼 承機制允許多重繼承,派生類可以覆蓋(override)基類中的任何方法或類,可以使用相同的方 法名稱調用基類的方法。 對象可以包含任意數量的私有數據。

      暫時用下面一段話,講一下作用域的事情,仍然是使用一段官方的教學代碼說一下。

      復制代碼

      def scope_test():

      def do_local():

      spam = "local spam"

      def do_nonlocal():

      nonlocal spam

      spam = "nonlocal spam"

      def do_global():

      global spam

      spam = "global spam"

      spam = "test spam"

      do_local()

      print("After local assignment:", spam)

      do_nonlocal()

      print("After nonlocal assignment:", spam)

      do_global()

      print("After global assignment:", spam)

      scope_test()

      print("In global scope:", spam)

      復制代碼

      nonlocal非局部的 global全局

      確實和c++一樣,設計時封裝性並不是和c#一樣完善,留個我們可以從外訪問的機會

      現在談一下類

      繼承的方法 class lei(lei1,lei2,lei3....)在這裡不再多提,可以繼承多個類。

      Python2.7和pytho3.3n的區別之一是。3.3沒有了經典類,全是新型類,原來就是class對象沒有父類,那麼就是從object繼承而來的,但是在3.3中就成了,在沒有繼承父類的時候它默認繼承了object類。雖說拖累了效率,但是也使代碼結構更加完整。

      這點和主流的c#有點關系了。

      我們還是以一個基礎的類來說一下

      復制代碼

      class Person:

      name=''

      age=0

      def __init__(self,nm,ag):

      self.name=nm

      self.age=ag

      print("constructor run")

      pass

      def shuchu(self):

      print(self.name)

      print(self.age)

      passpass

      x=Person('wangji',20)

      x.shuchu()

      復制代碼

      __init__()就是所謂的構造函數,在這裡不再多提。

      對於學習過c#的朋友我們可以把self當做this,而且在定義函數的時候第一個形參需要是self,

      為什麼?

      原理是python中對象的方法,需要先調用自己本身,所以本身也算作一個參數,在這裡寫出來了,函數的第一個形參我們就默認為self就可以

      我們可以嘗試一下,方法的重載是不行的,但python作為面向對象語言,自然不會丟掉函數重載這個面向對象語言所共有的重要特性。。。。其實這個地方我們要通過默認形參來達到這樣的目的。。這個地方,我也不是太了解,但是帶有默認形參的方法確實可以解決一些和重載有關的問題。

      Python 中的所有方法本質上都是虛方法,所以說重寫和其他語言基本一樣。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved