สรุปพื้นฐาน 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 (#) ไปจนสิ้นสุดบรรทัดนั้นๆ
- แบบหลายบรรทัดจะใช้ “”” “”” ตามตัวอย่างนี้
""" Use * for multiplication of a number The * is a multiplication operator in Python To print the value, use the print() function """ print(3 * 7)
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 เช็คว่าทั้งสองตัวเป็นจริงถึงจะคืนค่าจริง กรณีอื่นๆเป็น เท็จทั้งหมด เช่น (a and b) เป็นจริง
- or ถ้าทั้งสองตัวหนึ่งเป็นเท็จจะคืนค่า เท็จ กรณีอื่นๆ เป็นจริงทังหมด เช่น (a or b) เป็นจริง
- notคืนค่าตรงกันข้ามของค่าปัจจุบัน เช่น not(a and b) เป็นเท็จ เพราะ a and b เป็นจริง
ตัวดำเนินการสมาชิก
ตัวดำเนินการสมาชิกเป็น ตัวดำเนินการพิเศษของภาษา Python จะไม่พบในภาษาอื่น ไว้สำหรับเช็คว่า ค่าที่เรากำลังสนใจเป็นสมาชิกของตัวแปรนั้นๆ หรือไมจะคืนค่าเป็น จริงหรือเท็จแล้วแต่กรณีใช้กับ such as strings, lists, หรือ 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 ทั้งหมดของ ไพทอน ตามลำดับความสำคัญจากมากไปน้อย
- ** : ยกกำลัง
- ~ +-: complement, 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
นอกจากใน list แล้วยังมีตัวดำเนินการที่มีลำดับความคำคัญสูงสุดคือ “(…)”
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) # Truelen() เป็นฟังค์ชันที่เอาไว้นับจำนวนความยาวของ 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 "world"')
ผลที่ได้
Hello world
Modules and packages
- module คือไฟล์ Python ที่มีนามสกุล
.py
- module สามารถ import จาก module อื่นๆ ได้ด้วย keyword
import
- สามารถ เลือก import เฉพาะฟังค์ชันก็ได้ เช่น
from my_module import hello_world
- Standard Library ของ Python สามารถดูเพิ่มเติมได้ที่ The Python Standard Library
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()