สรุปพื้นฐาน python

ชนิดข้อมูลของ Python มีชนิดข้อมูลพื้นฐานอยู่ 5 ชนิด

  • Numbers เก็บข้อมูลตัวเลข
  • String เก็บข้อมูลตัวอักษร
  • List เก็บข้อมูลได้มากว่า 1 ค่าใน 1 ตัวแปร หรือที่เรียกว่า compound type
  • Tuple อ่านว่า “ทูเพิล” เก็บข้อมูลได้มากว่า 1 ค่าใน 1 ตัวแปร ใช้สำหรับเก็บลำดับ หรือที่เรียกว่า sequence type
  • Dictionary เก็บข้อมูลได้มากว่า 1 ค่าใน 1 ตัวแปรเช่นกัน หรือที่เรียกว่า table type เทียบได้กับตัวแปร array ใน php

 

คำสงวน ใน Python

and, as, assert, break, class, continue, def, del, elif, else, except, exec, finally, for, from, global, if, import, in, is, lambda, not, or, pass, print, raise, return, try, while, with, yield

การตั้งชื่อตัวแปร นิยมใช้การตั้งชื่อแบบ snake_case ก็คือใช้ตัวพิมพ์เล็กทั้งหมดและแบ่งคำด้วยunderscore(_) เช่น awesome_name = "John Doe" เป็นต้น

 

Comment

  • คอมเม้นของ Python เริ่มต้นด้วย hash (#) ไปจนสิ้นสุดบรรทัดนั้นๆ

 

Variables

  • a = b = 2 คือ chained assignment เป็นการกำหนดค่า 2 ให้กับ a และ b
  • ตัวแปร (variable) สามารถตั้งชื่อได้เฉพาะ ตัวอักษร ตัวเลข และ underscore(_) ไม่สามารถขึ้นต้นด้วยตัวเลขได้
  • ตัวเลขจะมี Type อยู่ 2 ประเภทคือ integers และ floats โดย integers คือตัวเลขธรรมดา ส่วนfloats คือตัวเลขที่มีจุดทศนิยม
  • เช็ค Type ของตัวแปรต่างๆ ได้โดยฟังชั่น type() เช่น type(999)
  • เราสามารถ convert จาก integer ไป float หรือ float ไป integer ได้ โดยใช้ built-in functions เช่น
    float_number = float(10) # แปลงค่า integer เป็น float
    number = int(35.321) # แปลงค่า float เป็น integer
    word = str(number) # แปลงค่า integer เป็น string
    
  • augmented assignment คือการรวม operation และ assignment 2 คำสั่ง ด้วยการใช้เพียง statement เดียว เช่น
    result = 10
    result += 5 # result = 15
    #เป็นการ เพิ่มค่า result เท่ากับ 5 และอัพเดทค่า รวมกลายเป็น result จะเท่ากับ 15
  • Boolean มีค่าได้เพียงแค่ 2 ชนิดคือ ไม่ True ก็ False โดยใช้เครื่องหมาย == เรียกว่า equality operator ในการเช็คหรือเปรียบเทียบตัวแปรสองตัว ว่ามีค่าเหมือนกันหรือไม่ เช่น
    one = 1
    two = 2
    print(one == two) # False
  • นอกจากการเปรียบเทียบด้วย == แล้ว เรายังสามารถเปรียบเทียบด้วย >= (มากกว่าหรือเท่ากับ) <= (น้อยกว่าหรือเท่ากับ) > (มากกว่า) และ < (น้อยกว่า)

 

สำหรับตัวดำเนินการในภาษา

ตัวดำเนินการทางคณิตศาสตร์

ตัวดำเนินการ อธิบาย ตัวอย่าง
+ บวก a + b มีค่า 30
ลบ a – b มีค่า -10
* คูณ a * b มีค่า 200
/ หาร b / a มีค่า 2
% เศษของการหาร b % a มีค่า 0
** ยกกำลัง a**b หมายถึง 10 ยกกำลัง 20
// หารปัดเศษทิ้ง 9//2 is มีค่า 4 และ 9.0//2.0 มีค่า 4.0

 

ตัวดำเนินการเปรียบเทียบ

ตัวดำเนินการ อธิบาย ตัวอย่าง
== เช็คว่าค่าสองค่าเท่ากันหรือไม (a == b) เป็นเท็จ
!= เช็คว่าค่าสองค่าไม่เท่ากันหรือไม (a != b) เป็นจริง
<> เช็คว่าค่าสองค่าไม่เท่ากันหรือไม (a <> b) เป็นจริง. เหมือนกับตัวดำเนินการ !=
> เช็คว่าค่าทางซ้ายมากกว่าค่าทางขวาหรือไม่ (a > b) เป็นเท็จ
< เช็คว่าค่าทางซ้ายน้อยกว่าค่าทางขวาหรือไม่ (a < b) เป็นจริง
>= เช็คว่าค่าทางซ้ายมากกว่าหรือเท่ากับค่าทางขวาหรือไม่ (a >= b) เป็นเท็จ
<= เช็คว่าค่าทางซ้ายน้อยกว่าหรือเท่ากับค่าทางขวาหรือไม่ (a <= b) เป็นจริง.

ตัวดำเนินการกำหนดค่า

ตัวดำเนินการ อธิบาย ตัวอย่าง
= ตัวแปรทางซ้ายถูกกำหนดให้มีค่าเท่ากับทางขวา c = a + b เป็นการกำหนดค่าให้กับ c  โดยให้มีค่าเท่ากับ a + b
+= บวกค่าของทางซ้ายด้วยค่าทางขวา c += a  หมายความว่า c = c + a
-= ลบค่าของทางซ้ายด้วยค่าทางขวา c -= a หมาความว่า c = c – a
*= คูณค่าของทางซ้ายด้วยค่าทางขวา c *= a หมาความว่า c = c * a
/= หารค่าของทางซ้ายด้วยค่าทางขวา c /= a หมาความว่า c = c / a
%= หารเอาเศษค่าของทางซ้ายด้วยค่าทางขวา c %= a หมาความว่า c = c % a
**= ยกกำลังค่าของทางซ้ายด้วยค่าทางขวา c **= a หมาความว่า c = c ** a
//= หารปัดเศษทิ้งค่าของทางซ้ายด้วยค่าทางขวา c //= a หมาความว่า c = c // a

 

ตัวดำเนินการทางตรรกะ

ตัวดำเนินการ อธิบาย ตัวอย่าง
and and เช็คว่าทั้งสองตัวเป็นจริงถึงจะคืนค่าจริง กรณีอื่นๆเป็น เท็จทั้งหมด (a and b) เป็นจริง.
or or ถ้าทั้งสองตัวหนึ่งเป็นเท็จจะคืนค่า เท็จ กรณีอื่นๆ เป็นจริงทังหมด (a or b) เป็นจริง.
not คืนค่าตรงกันข้ามของค่าปัจจุบัน not(a and b) เป็นเท็จ เพราะ a and b เป็นจริง.

 

ตัวดำเนินการสมาชิก
ตัวดำเนินการสมาชิกเป็น ตัวดำเนินการพิเศษของภาษา Python จะไม่พบในภาษาอื่น ไว้สำหรับเช็คว่า ค่าที่เรากำลังสนใจเป็นสมาชิกของตัวแปรนั้นๆ หรือไมจะคืนค่าเป็น จริงหรือเท็จแล้วแต่กรณีใช้กับ such as strings, lists, or tuple

ตัวดำเนินการ อธิบาย ตัวอย่าง
in จะคืนค่าเป็นจริงถ้า พบค่าในตัวแปรที่เราสนใจ ในกรณีอื่นเป็นเท็จทั้งหมด x in y, คือค่าเป็น 1 ถ้า x เป็นสมาชิกของ y.
not in จะคืนค่าเป็นจริงถ้าไม่พบค่าในตัวแปรที่เราสนใจ ในกรณีอื่นเป็นเท็จทั้งหมด x not in y, คือค่าเป็น 1 ถ้า x ไม่เป็นสมาชิกของ y

นอกจากนี้ Python ยังมี  Identity Operators เพื่อเช็คว่ามีตัวแปรที่ต้องการทราบอยู่ใน memory หรือเปล่า คือ is และ not is

 

ลำดับความสำคัญของตัวดำเนินการใน Python Operators Precedence

ในตารางจะแสดง operators ทั้งหมดของ ไพทอน ลำดับความสำคัญจากมากไปน้อย

Operator Description
** ยกกำลัง
~ + – Ccomplement, unary plus and minus
* / % // คูณ, หาร, modulo and floor division
+ – บวก, ลบ
>> << Right and left bitwise shift
& Bitwise ‘AND’
^ | Bitwise exclusive `OR’ and regular `OR’
<= < > >= Comparison operators
<> == != Equality operators
= %= /= //= -= += *= **= Assignment operators
is is not Identity operators
in not in Membership operators
not or and Logical operators

นอกจากในตารางแล้วยังมีตัวดำเนินการที่มีลำดับความคำคัญสูงสุดคือ “(…)”

 

Strings

  • การรวม String 2 ตัวเข้าด้วยกัน (combine) จะใช้เครื่องหมาย + เช่น
    name = "test"
    hello = "Hello " + name
    print(hello) # Hello test
    
  • Python สามารถใช้ String คูณด้วย integer ได้ด้วย เช่น "Hello" * 10
  • String ใน Python เก็บค่าแต่ละ characters เป็น index โดยเริ่มต้นจาก index = 0 ตัวอย่าง คำว่าTest
  • สามารถใช้ค่าติดลบ ในการเข้าถึง index ของ String ได้ โดยจะเริ่มทำการนับจากด้านหลังมาด้านหน้า
    result = "abcdefg"
    
    # a b c d e f g
    # [0] [1] [2] [3] [4] [5] [6] # นับจาก หน้าไปหลัง
    # [-7] [-6] [-5] [-4] [-3] [-2] [-1] # นับจาก หลังไปหน้า
    print(result[3]) # d
    print(result[6]) # g
    print(result[-2]) # f
    
  • สามารถเช็คว่าใน String มีคำหรือตัวอักษรอยู่ใน String หรือไม่ผลลัพธ์จะเป็น boolean True หรือ False ด้วยการใช้ in keyword เช่น
    has_a = "A" in "bcdAefg"
    has_aefg = "Aefg" in "bcdAefg"
    print(has_a)    # True
    print(has_aefg) # True
  • len() เป็นฟังค์ชันที่เอาไว้นับจำนวนความยาวของ String
  • “”” (triple-quoted) เอาไว้สำหรับประกาศ String แบบหลายๆบรรทัด
    phrase = """
    It is a really long string
    triple-quoted strings are used
    to define multi-line strings
    """
    length = len(phrase)
    print(length)   # 88
    
  • Backslash (\) เอาไว้ใช้สำหรับ escape character กรณีต้องการพิมพ์ ” หรือ ‘ ลงใน String ซึ่งโดยปกติ String จะมี ” ที่เริ่มต้นและสุดของ String หากแทรก ” ใน String โปรแกรมจะมอง ” ใน String กลายเป็นจุดสิ้นสุดของ String กลายเป็น error ไป วิธีแก้ ก็คือต้องใช้ \ เช่น
    print("You said \"You loved me\"")   # You said "You loved me"
    print('My name\'s John Doe')          # My name's John Doe
  • lower() เป็นเมธอดสำหรับทำให้ String กลายเป็นตัวพิมพ์เล็ก ขณะที่ upper() เอาไว้สำหรับเปลี่ยน String เป็นตัวพิมพ์ใหญ่ การใช้งานเมธอดเราจะใช้ . (dot) ตามด้วยชื่อเมธอด เช่น
    "JohnDoe".upper()   # JOHNDOE
    "JohnDoe".lower()   # johndoe
    
  • string format ใช้ % ตามหลัง String ร่วมกับตัวแปร เพื่อกำหนด format ของ String ที่เราต้องการ หลักการคือ จะเปลี่ยนค่า %s ใน String กลายเป็นตัวแปรที่เรากำหนดไว้ เช่น
    name = "Chai"
    age = 15
    print("Hello, My name is %s" % name)  # Hello, My name is Chai
    print("I'm %d years old" % age)  # I'm 15 years old
    

    %s เป็น symbol สำหรับ String ส่วน %d เป็น symbol สำหรับใช้แทนตัวเลข

 

Data structures

  • list คือ data structure ที่เอาไว้เก็บข้อมูลหลายๆข้อมูล ค่าที่เก็บใน list ต้องเป็นชนิดเดียวกัน เช่น
    students = ["John Doe", "Jane Doe", "Chuck Norris"]
    squares = [1, 4, 9, 16, 25, 36, 49, 64]
  • การเพิ่มข้อมูลลงไปใน list ใช้เมธอด append() และ list เป็น mutable เราสามารถเปลี่ยนข้อมูลใน list ได้ เช่น
    animals = ['elephant', 'lion', 'tiger', "giraffe"]
    print(animals)   # ['elephant', 'lion', 'tiger', 'giraffe']
    
    animals.append("dino")
    print(animals)   # ['elephant', 'lion', 'tiger', 'giraffe', 'dino']
    
    animals[0] = "cat"
    print(animals)   # ['cat', 'lion', 'tiger', 'giraffe', 'dino']
    
  • Tuples คือ list ที่ไม่สามารถเปลี่ยนแปลงข้อมูลได้ ไม่สามารถเพิ่ม ลบ หรือแก้ไขข้อมูลเหมือน list ได้ มี syntax ง่ายๆคือ ขึ้นต้นและปิดด้วย ( และ ) ขั้นข้อมูลด้วย comma เช่น
    this_is_tuple = ('t', 'u', 'p', 'l', 'e')
    
  • Dictionary คล้ายคลึงกับ list แต่ต่างกันที่ Dictionary สามารถเข้าถึงข้อมูลได้ด้วยการใช้ key แทนที่จะเป็น index แบบ list (คล้ายคลึงกับ Ruby Hash, Java HashMap หรือ JSON ท่าเทียบกับภาษาอื่นๆ)
    phone_book = {"John": 123, "Jane": 234, "Jerard": 345}
    print(phone_book["John"])  # 123
    
  • in นอกจากเช็คตัวอักษรใน String ได้แล้ว ก็ยังสามารถเช็คว่ามี item ที่ต้องการใน list หรือ dictionary ได้อีกด้วย

 

Condition expressions

  • Boolean operators ใช้เปรียบเทียบ statement ผลลัพธ์เป็น True หรือ False
  • and จะเป็น True ก็ต่อเมื่อ 2 กรณีเป็นจริงทั้งคู่นอกนั้นเป็น False
  • or จะเป็นจริง True ก็ต่อเมื่อ กรณีใดเป็นจริง จะเป็น False เมื่อทั้ง 2 กรณีเป็นเท็จ
  • not เอาไว้กลับค่าให้ตรงข้าม เช่น จาก True หากมี not ก็จะกลายเป็น False
  • ลำดับความสำคัญ ไม่ได้เริ่มจากซ้ายไปขวา แต่นับจาก not and และ or ตามลำดับ
  • if statement เอาไว้เช็คเงื่อนไขว่าเป็นจริงหรือไม่ ถ้าจริงก็จะทำงานในส่วนของ statement (Python จะใช้ indentation ด้วย 4 spaces)
    if condition:
        print("")
    

    ตัวอย่างเช่น

    name = "me"
    if name == "me":
        print("Hello me") 
    
  • กรณี if/else หากเช็คเงื่อนไขเป็นจริง จะทำใน if แต่ถ้าไม่ใช่ก็จะทำใน else เช่น
    name = "John Doe"
    
    if name == "Chai":
        print("Hello Chai")
    else:
        print("Hello John Doe")
    
  • else if กรณีที่ต้องการเอาไว้เช็คหลายๆเงื่อนไข โดยใช้คีเวิร์ด elif เช่น
    point = 82
    
    if point >= 80:
        print("Grade A")
    elif point < 80 and point >= 70:
        print("Grade B")
    elif point < 70 and point >= 60:
        print("Grade C")
    elif point < 60 and point >= 50:
        print("Grade D")
    else:
        print("FFFFFFF")
    

กรณี เงื่อนไขเกี่ยวกับ มากกว่าน้อยกว่า เราสามารถยุบเงื่อนไข เขียนสั้นๆแบบนี้ก็ได้ (อันนี้ผมเพิ่งรู้จากที่ตัว IDE มันแนะนำ Simplify chained comparison เช่น

point = 82

if point >= 80:
    print("Grade A")
elif 70 <= point < 80:
    print("Grade B")
elif 60 <= point < 70:
    print("Grade C")
elif 50 <= point < 60:
    print("Grade D")
else:
    print("FFFFFFF")

แต่จริงๆแล้ว if/else เรามีแค่เงื่อนไขเดียวก็ได้

point = 82

if point >= 80:
    print("Grade A")
elif 70 <= point:
    print("Grade B")
elif 60 <= point:
    print("Grade C")
elif 50 <= point:
    print("Grade D")
else:
    print("FFFFFFF")

 

ช่วงการทำงาน Switch ในไพทอน Switch Statement Selection Python

ใน ไพทอนไม่มี Switch ให้ใช้ ตัวอย่างเช่น จะเขียน

switch ($value) {
    case 'a':
        $result = $x * 5;
        break;
    case 'b':
        $result = $x + 7;
        break;
    case 'c':
        $result = $x - 2;
        break;
}

แบบใน PHP ใน ไพทอนไม่มี Switch แบบนี้ให้ใช้ เป็นภาษาที่แปลกแตกต่างจากภาษาอื่น (ภาษาอื่นๆเค้ามีกันหมด)
แต่เขียนอีกแบบได้ ได้ผลแบบเดียวกันกับ php ถ้าเขียนเป็น ไพทอน ได้ตามนี้

result = {
  'a': lambda x: x * 5,
  'b': lambda x: x + 7,
  'c': lambda x: x - 2
}[value](x)

 

Loops

  • For Loop มีรูปแบบ for i in range: เช่น วนลูปปริ้น 0-4
    for i in range(5):
        print(i)
    
  • วนลูปปริ้นข้อมูลในลิสท์ [2, 3, 5, 7]
    primes = [2, 3, 5, 7]
    
    for prime in primes:
        print(prime)
    
  • loop กับ String
    for ch in "Hello World":
        print(ch)
    
  • while loop จะ execute เมื่อ condition เป็น true
    square = 0
    number = 1
    
    while number < 10:
        square = number ** 2
        print(square)
        number += 1
    
  • break ไว้ใช้หยุด loop
  • continue เอาไว้ใช้ข้ามโค๊ดส่วนอื่นๆภายใน loop

 

Functions

  • ฟังค์ชันใน Python ประกาศด้วย keyword def เป็นส่วนของ code block
    def say_hi():
        print("Hello")
  • ฟังค์ชันสามารถรับ parameter ก็ได้เช่นกัน โดยกำหนด parameters ภายใน ()
    def sum(a, b):
        print(a + b)
    
  • ฟังค์ชันสามารถเซต default parameter ได้ในกรณีที่เราไม่ได้ส่ง parameter ให้กับฟังค์ชัน เช่น
    def say_hi(name='John Doe'):
        print("Hello %s" % name)
    say_hi()   # Hello John Doe
    

 

การสร้างฟังก์ชั่นไม่ระบุชื่อ ใน ไพทอน The Anonymous Functions

ในการสร้างฟังก์ชั่น ไม่ระบุชื่อ (Anonymous Functions:) นั้นสามารถสร้างโดยใช้ Keyword “lambda” ซึ่งการสร้างฟังก์ชั่นไม่ระบุชื่อนี้ เราจะไม่ใช้ keyword def เพื่อสร้างฟังก์ชั่น

ฟังก์ชั่นไม่ระบุชื่อนี้ สามารถระบุ arguments ให้กับฟังก์ชั่นกี่ตัวก็ได้ แต่การ return ค่าออกจากฟังก์ชั่น return ได้เพียงค่าเดียวเท่านั้น

ข้อจำกัดของ ฟังก์ชั่นไม่ระบุชื่อ

  • ไม่สามารถ เรียกเพื่อให้แสดงค่าได้ เพราะฟังก์ชั่นไม่ระบุชื่อจำเป็นต้องมี expressions ด้วยเสมอ
  • ไม่สามารถเรียกข้าม namespace ถ้า (ถ้า local เป็นคนสร้าง global จะเรียกใช้ไม่ได้)

รูปแบบการสร้าง ฟังก์ชั่นไม่ระบุชื่อ

lambda [arg1 [,arg2,.....argn]]:expression

ตัวอย่าง def_function_lambda.py

# สร้างฟังก์ชั่น
mylam =  lambda arg1, arg2:  arg1 + arg2;

# เรียกใช้ ฟังก์ชั่น
print ("ผลรวม : ", mylam( 10, 20 ) ) 
print( mylam( 30,40 ) )

# ผลที่ได้ 
ผลรวม :  30
70

จากตัวอย่างจะเป็นการสร้าง ฟังก์ชั่นไม่ระุชื่อ กำนหดให้เค่ากับ ตัวแปล mylam และทดลองเรียกใช้ ฟังก์ชั่นไม่ระบุชื่อผ่าน ตัวแปล mylam

 

การสร้างฟังก์ชั่น ส่งค่าออกจากฟังก์ชั่นไพทอน The return Statement

การสร้างฟังก์ชั่น และจำเป็นต้องส่งค่าออกจากฟังก์ชั่นในภาษาไพทอนนั้นจะใช้ keyword คำว่า “return” เหมือนกับภาษาอื่นๆ ประโยชน์ของการสร้างฟังก์ชั่นที่มีการ return นั้นมีประโยชน์ ในการคำนวน หรือ ลดการเขียนโค้ดที่ซ้ำๆ กันและมีการเรียกใช้กันไปมาระหว่างฟังก์ชั่นด้วย กันเอง หรือ เพื่อ กำหนดรูปแบบแสดงผลแบบต่างๆ

ตัวอย่าง def_function_return.py

# การสร้างฟังก์ชั่นที่มีการส่งค่าออกจากฟังก์ชั่น 
def freturn(arg1, arg2):
    sum = arg1+arg2
    var = "ผลรวมจากฟังก์ชั่น ในตัวอย่าง จากเว็บ Mindphp.com คือ : "
    return var , sum

print ( freturn (10, 15) )

# ผล
('ผลรวมจากฟังก์ชั่น ในตัวอย่าง จากเว็บ Mindphp.com คือ : ', 2

 

Classes and objects

  • object คือส่วนที่รวมตัวแปร (variables) และฟังค์ชัน (function) โดย object ถูกสร้างมาจาก class
  • class ก็คือรูปแบบ หรือ template ที่เอาไว้สร้าง object

หากใครไม่รู้จัก Class หรือ Object แนะนำให้อ่านเรื่อง OOP ประกอบครับ concept เดียวกัน เหมือนกันทุกภาษา

  • การสร้างคลาสใน Python
    class MyClass:
        name = "John Doe"
    
        def greeting(self):
            print("Hello! %s" % self.name)
  • การสร้าง object จาก class MyClass
    my_object = MyClass()
    my_object.greeting()   # Hello! John Doe
    
    my_object.name = "Jane Doe"
    my_object.greeting()    # Hello! Jane Doe
    
  • ใช้ self เป็น parameter แรกของ method และเข้าถึงตัวแปร name ในคลาสด้วย self.nameเพราะ self จะ refer ไปที่ object ที่สร้างขึ้น
  • __init__ เป็นฟังค์ชันที่เอาไว้สำหรับกำหนดค่าเริ่มต้นให้กับ object (มักจะมี parameter แรกเป็นself) จะถูกเรียกเมื่อ object ถูกสร้างขึ้น

ไพทอน แบบอ๊อบเจ็ค Python OOP – Object-oriented programming บนภาษาไพทอน

ไพทอนเป็นภาษาสคลิป ที่สนับสนุนการเขียนโปรแกรม แบบ OOP ก่อนศึกษาวิธีการเขียนกัน เรามาทำความรู้จักคำศัพท์ ต่างๆ เหล่านี้กันก่อน
Calss: คือ ต้นแบบสำหรับสร้างออปเจ็คโดยที่ต้นแบบที่ว่าจะถูกสร้างขึ้น โดยจะมีคุณสมบัตของคลาส คือตัวแปลในคลาส เมดทอด สามารถเข้าถึง ได้ด้วย dot(.) เครื่องหมาย .

Class variable:  คือตัวแปลที่ใช้ร่วมกันภายในคลาส Class variable: ถูกกำหนดขึ้นภายในคลาส แต่อยู่นอก เมทอด ของคลาส

Instance Variable คือ ตัวแปรช ที่ถูกสร้างและยังคงอยู่ ภายใน method ของ Class ที่สร้างมันขึ้นมาเท่านั้น

Inheritance: คือการถ่ายโอนความสามารถของคลาสหนึ่งไปยังอีกคลาสหนึ่ง เช่นจากคลาสแม่ ไปยังคลาสลูก

Function overloading: คือฟังก์ชั่นที่ชื่อเหมือนกัน แต่สามารถแยการทำงาน ของฟังก์ชั่นแต่ละตัวออกจากกันได้ด้วย arguments

Constructor function: คือฟังก์ชั่นที่สร้างเรียกอัตโนมัตเมื่อมีการสร้างออปเจ็คจากคลาส ใน python ใช้ function __init__()

Instance: คือการสร้าง ออปเจ็คตากคลาส  ออเจ็คที่ถูกสร้างขึ้น จะมีชนิดเป็น obj  ซึ่งเป็นเอาความสามารถของคลาสทั้งหมด ออกมาเก็บไว้ในตัวแปล

Method :คือฟังก์ชั่นชนิดหนึ่งที่ถูกสร้างขึ้นภายใน คลาส

Object : คือ คือคุณสมบัติต่างๆ ของสิ่งที่เราสร้างขึ้นจากคลาส ไม่ว่าจะเป็น  data members (class variables และ instance variables) และ methods.

 

Create Class OOP

การสร้าง Class ในไพทอน ใช้ keyword Class เหมือนกับภาษาอื่นๆ ในการประกาศสร้างคลาส
รูปแบบการสร้าง Class

class ชื่อคลาส :
['ข้อความอธิบายคลาส มีหรือไม่มีก็ได้']
var = value

def ชื่อเมธอด():

ตัวอย่าง สร้าง Class ชื่อ Employee
# ตัวอย่าง class_create.py

class Employee:
'ตัวอย่าง class พนักงาน'

empCount = 0

def __init__(self, name, salary):
self.name = name
self.salary = salary
Employee.empCount += 1

def displayCount(self):
print ("Total Employee %d ---" %Employee.empCount)

def displayEmployee(self):
print ("Name : ", self.name,  ", Salary: ", self.salary)
obj = Employee("Mindphp.com", 1000)
obj.displayCount()
obj.displayEmployee()
obj = Employee("Mindphp.com 2 ", 2000)
obj.displayCount()
obj.displayEmployee()
print(obj.empCount)

จากตัวอย่าง สร้าง Class ชื่อ Employee
มี Class variable 1 ตัวคือ  empCount ซึ่งจะสามารถใช้งานเป็นตัวแปลที่ค่ายังคงอยู่ ไม่ว่าจะสร้าง ออปเจ็คขึ้นมากี่ตัวกี่ตั้งก็ตาม
มี Method พิเศษ 1 Method  คือ __init__ ซึ่ง เป็น constructor function
self argument คือตัวแปลที่ไว้รับค่าข้างนอกเข้ามา

ผลที่ได้

Total Employee 1 ---
Name :  Mindphp.com , Salary:  1000
Total Employee 2 ---
Name :  Mindphp.com 2  , Salary:  2000
2

 

Built-In Class Attributes

จาก บทเรียนก่อนหน้านี้  ไพทอน การสร้างคลาส การเขียนโปรแกรมแบบออปเจ็ค Create Class OOP  เมื่อเราสร้างคลาสขึ้นมาเพื่อไว้ใช้งาน ไพทอน จะสร้าง Attributes ของคลาสให้อัตโนมัต และเราสามารถเรียกใช้งานได้เลย ดังนี้

  • __dict__ : Dictionary สำหรับเก็บ namespace ของคลาส
  • __doc__ : คลาสข้อความสำหรับเป็นเอกสาร ถ้าเราไม่ได้กำหนดข้อความอธิบายไว้ ก็จะไม่มี Attributes นี้
  • __name__: ชื่อคลาสที่สร้างขึ้น
  • __module__:  ชื่อโมดูลภายในคลาสที่ถูกกำหนดขึ้นมา เหมือนกับ __main__
  • __bases__ : เก็บเป็นตัวแปล tuple เก็บชื่อ bass class

จะตัวอย่าง โค้ด class_create.py จาก บทที่แล้ว

เพิ่ม โค้ดลงไปตามนี้

print "Employee.__doc__:", Employee.__doc__
print "Employee.__name__:", Employee.__name__
print "Employee.__module__:", Employee.__module__
print "Employee.__bases__:", Employee.__bases__
print "Employee.__dict__:", Employee.__dict__

ผลของการรันจะได้ ดังนี้

Employee.__doc__: Common base class for all employees
Employee.__name__: Employee
Employee.__module__: __main__
Employee.__bases__: ()
Employee.__dict__: {'__module__': '__main__', 'displayCount':
, 'empCount': 2, 
'displayEmployee': , 
'__doc__': 'Common base class for all employees', 
'__init__': }

 

OOP กับการสือทอดคลาส Class Inheritance

การเขียนโปรแกรมด้วยไพทอนแบบ Python OOP – Object-oriented programmingเราสามารถสือทอดความสามารถของคลาสที่สร้างไว้อยู่แล้ว (คลาสแม่) มาให้คลาสใหม่ที่กำลังจะขึ้น (คลาสลูก) เหมือนการเขียนแบบ OOP ในภาษา Java หรือ php และในไพทอนสามารถสือทอดความสามารถจากคลาสแม่หลายๆ คลาสมายังคลาสลูกได้

รูปแบบ

class SubClassName (ParentClass1[, ParentClass2, ...]):
   'คำอธิบายคลาส'
   class_suite

# ตัวอย่าง class_inheritance.py

class Parent:        # สร้างคลาสแม่
   parentAttr = 100
   def __init__(self):
      print ("constructor ของ คลาสแม่")

   def parentMethod(self):
      print ('method ของคลาสแม่')
      
   def parentMethod2(self):
       print('method2 ของคลาสแม่')
   
   def setAttr(self, attr):
      Parent.parentAttr = attr

   def getAttr(self):
      print ("Parent attribute :", Parent.parentAttr)

class Child(Parent): # สร้างคลาสลูก
    def __init__(self):
        print ("constructor ของ คลาสลูก")

    def childMethod(self):
        print ('method ของคลาสลูก')
        
    def chidgetAttr(self):
        print(' Attr ที่กำหนดไว้ในคลาสแม่ เรียกใช้โดยคลาสลูก', self.parentAttr)
c = Child()          # instance of child
c.childMethod()      # เรียกใช้ method คลาสลูก
c.parentMethod()     # เรียกใช้ method ของคลาสแม่
c.parentMethod2()   # เรียกใช้งาน method 2 ของคลาสแม่
c.setAttr(200)       # เรียกใช้ method ของคลาสแม่
c.getAttr()          # เรียกใช้ method ของคลาสแม่ 
c.chidgetAttr() # เรียกใช้ method ของคลาสลูก

ผลที่ได้

constructor ของ คลาสลูก
method ของคลาสลูก
method ของคลาสแม่
method2 ของคลาสแม่
Parent attribute : 200
 Attr ที่กำหนดไว้ในคลาสแม่ เรียกใช้โดยคลาสลูก 200

 

Class Inheritance multiple parent classes

การสือทอดคลาส Class Inheritance เราสามารถสืบทอดคลามสามารถจากคลาสแม่หลายๆ คลาสได้ ด้วยดังตัวอย่าง

class A:        # สร้าง class A
.....

class B:         # สร้าง calss B
.....

class C(A, B):   # คลาส C สืบทอดมาจาก  A and B
.....

นอกจากนี้ไพทอนยังมีฟังก์ชั่น ไว้สำหรับดูการสืบทอดของคลาส คือ
issubclass(sub, sup) คืนค่าเป็น boolean เป็นจริงถ้า sub เป็นคลาสลูกของ sup
isinstance(obj, Class) คืนค่าเป็น boolean เป็น จริงถ้า object ที่ต้งอการตรวจสอบถูกสร้างมาจาก Class (ชื่อคลาส) เป็นคลาสแม่หรือคลาสลูกก็ได้
 

การเรียกใช้งานฟังก์ชั่น ในไพทอน แบบ Object สอน Python

การเรียกใช้งาน ฟังก์ชั่นในลักษณะแบบ Object เหมือนกับ การสร้าง object ในการเขียนภาษาอื่นๆแบบ OOP ในไพทอน จะมองว่า ฟังก์ชั่นเป็น object ตัวหนึ่งได้

และสามารถเรียกใช้งานในลักษณะ Indirect Call ได้

ตัวอย่าง function_indirect_call.py

def echo (msg):
    print(msg)
    
e = echo
e('Hello Mindphp.com')

ผลที่ได้

Hello Midnphp.com
 

Modules and packages

  • module คือไฟล์ Python ที่มีนามสกุล .py
  • module สามารถ import จาก module อื่นๆ ได้ด้วย keyword import
  • สามารถ เลือก import เฉพาะฟังค์ชันก็ได้ เช่น
from my_module import hello_world

 

File input/output

  • ฟังค์ชัน open เอาไว้สำหรับเปิดไฟล์ โดยรับ parameter เป็น ชื่อไฟล์ และ ออปชั่น เช่น
    open("README.md", "w")    # (write) เขียนไฟล์ชื่อ README.d
    open("README.md", "r")    # (read) อ่านไฟล์ชื่อ README.md
    
  • ตัวอย่างการอ่านไฟล์ใน Python
    f = open("input.txt", "r")   
    
    for line in f.readlines():   # read lines
        print(line)
    
    print(f.readline())  # ปริ้นเฉพาะบรรทัดแรก
    
    f.close()  # ควรจะ close() ทุกครั้ง
    
  • ใช้คีย์เวิร์ด “a” เพื่อเขียนไฟล์ต่อจากข้อมูลเดิม ถ้าใช้ “r” จะลบข้อมูลเก่าแล้วเขียนทับ
    file = open("content.txt", "a")
    # code goes here
    file.close()
    

ที่มา: