python_Class的使用學習方法_OOP_舉四個例子理解語法及實作_Class文件導入方法(兩環境)_類的init的常用功能

還記得在之前 C++學習過程中

我們有舉一個橘子裝箱過程

http://coolmandiary.blogspot.tw/2016/08/c1x.html


在 python 一樣概念只是 程式語法長的不太一樣

在 C# 也有介紹到 C# 中的 Class用法

http://coolmandiary.blogspot.tw/2016/09/cclass.html


物件導向(面向對象)

object-oriented program


物件(對象) = 屬性(靜態的) + 方法(函數def...:)

捨麼這實在太抽象了!!!!!!

舉個例子  有一隻狗這個對象

你目前有這個對象(物件)

然後你開始要設計  "狗"  這個物件 的設計藍圖(Class)

想想看一隻狗

會做哪些行為、動作

比方會吠、會走、會吃.... (方法)

它具有捨麼毛色、體重多種、幾隻腳 (靜態屬性)



想好之後我們就可以來進行Class的撰寫了

在 python 預設的 GUI Shell 中

File ---> New File


將程式寫好之後另存新檔(Save as)



之後針對dogClass文件再到上方的 Run  ---> Run Module (快捷 F5)









你有沒有好奇 def 裏頭都有放置一個Self 這個參數


還記得我們在上一篇友介紹到

在python這個程式語言中默認參數

的觀念嗎

類的 function 定義上  需要在前方設置 self 參數 !!!!!!


沒有 self 參數 的後果


第一個Example 程式碼


class Dog:#類別盡量以大寫字母開頭
    "一個類的簡單例子"
    #屬性
    color = 'green'
    weight = 10
    legs = 4
    #方法
    def bark(self):
        print("狗在吠叫")
    def eat(self):
        print("吃東西")
    def walk(self):
        print("走動")


====================================================================


想想


一個 "計算機" 物件 針對兩個數的四則運算

具有    加 減 乘 除 等四種方法(方法)

這台計算機  價格是多少(靜態屬性)
名字.....等等




在價格部份由於屬於 int 型態 可以搭配 str( )  這個 BIF 函數
進行轉為字串

第二個Example 程式碼

主程式部分

#-*- coding: UTF-8 -*-
import  class_Calculator
cal = class_Calculator.Calculator()
print("計算機名稱:"+cal.name)
print ("計算機價格:"+str(cal.price))
cal.add(8,4)
cal.sub(24,6)
cal.multi(8,6)
cal.divide(16,8)

類別部分


#-*- coding: UTF-8 -*-
class Calculator:
    name = 'Good calculator' #類之屬性1
    price = 18 #類之屬性2
    #每一個功能以def來定義方法
    def add(self,x,y): #在類為一個默認參數
        #print (self.name) #針對Calculator此類之名字
        resultAdd = x+y
        print (resultAdd)
    def sub(self,x,y):
        resultSub = x-y
        print (resultSub)
    def multi(self,x,y):
        print (x*y)
    def divide(self,x,y):
        print (x/y)



__init__的常用功能


這裡有點像之前在C# 跟 C++ 中  建構子的概念

在C++中我們對建構函式(constructor)

跟在C#中建構子

解釋為 定義類別的實體(Instance)建立之後,要進行初始化動作(賦值)




因此這裡我們改一下程式



第三個Example 程式碼(__init__用法)


主程式部分

#-*- coding: UTF-8 -*-
import  class_Calculator
cal = class_Calculator.Calculator('好用計算機',80,50,40,150)
print("計算機名稱:"+cal.name)
print ("計算機價格:"+str(cal.price))
print ("計算機高:" + str(cal.h))
print ("計算機寬:" + str(cal.w))
print ("計算機重:" + str(cal.we))
cal.add(8,4)
cal.sub(24,6)
cal.multi(8,6)
cal.divide(16,8)

類別部分


#-*- coding: UTF-8 -*-
class Calculator:
    #固有屬性
    name = 'Good calculator' #類之屬性1
    price = 18 #類之屬性2
    #有點像建構子的概念(在建立類的同時給定這些屬性特定值)
    def __init__(self , name , price , height , width , weight):
        self.name = name
        self.price = price
        # 定義的屬性名字不一定要跟函數輸入的名字一樣
        self.h = height
        self.w = width
        self.we = weight

    #每一個功能以def來定義方法
    def add(self,x,y): #在類為一個默認參數
        #print (self.name) #針對Calculator此類之名字
        resultAdd = x+y
        print (resultAdd)
    def sub(self,x,y):
        resultSub = x-y
        print (resultSub)
    def multi(self,x,y):
        print (x*y)
    def divide(self,x,y):
        print (x/y)


有時候我們會想把Class後頭的一些輸入參數設定默認參數!!!!



這時我們也可以預設就先給好這些值



這時我們就可以 ignore 後頭的參數

其他皆為默認值





再舉最後一個例子


想想一台車子

一台車子具有其 "廠牌名字" (靜態屬性)
具有車牌號碼 "車號"  .....等等
車子的顏色
車子的.......&*^%$#





難道   類的靜態屬性 我們只能用欄位方式表示(撰寫)嗎?????

我們可否用  方法 來試著撰寫看看呢 ?????
(方法)

當然可以瞜~~~~~

舉例來說我們要打印  豐田汽車的廠牌名字的話

我們可以這麼簡單寫




這裡我們是用 剛剛學的 __init__ method(self , ...)
來進行

首先我們回到pycharm IDE 再重新寫一次這個簡短的Code!!!

 self會幫我們自動取得 name此方法







第四個Example 程式碼

主程式部分


#-*- coding: UTF-8 -*-
import  class_Calculator
import  carClass
texi = carClass.Car('Toyota')
print (texi.nm)
texi.nm = 'NISSAN'
print (texi.nm)
'''
cal = class_Calculator.Calculator('好用計算機',80,48)
print("計算機名稱:"+cal.name)
print ("計算機價格:"+str(cal.price))
print ("計算機高:" + str(cal.h))
print ("計算機寬:" + str(cal.w))
print ("計算機重:" + str(cal.we))
'''
#cal.add(8,4)
#cal.sub(24,6)
#cal.multi(8,6)
#cal.divide(16,8)




類別部分


class Car:
    def __init__(self , nm):
        self.nm = nm
    def name(self):
        return self.nm


PS:  多行註解 用  三組單引號  ''' .....   '''
在 pycharm IDE 中   如果要引用外部檔案中的Class

要先 import  該檔名

檔案名.Class名稱.屬性
檔案名.Class名稱.方法








留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header