ผลต่างระหว่างรุ่นของ "Python Programming/Classes"
Cardcaptor (คุย | มีส่วนร่วม) (→คลาส) |
Chaiporn (คุย | มีส่วนร่วม) |
||
(ไม่แสดง 4 รุ่นระหว่างกลางโดยผู้ใช้ 1 คน) | |||
แถว 1: | แถว 1: | ||
− | : ส่วนนี้ลอกมาจาก [http://garnet.cpe.ku.ac.th/~jtf/dm/?q=node/31 การโปรแกรมเชิงวัตถุในไพทอน] ของ [http://www.cpe.ku.ac.th/~jtf/ จิตรทัศน์ ฝักเจริญผล] | + | : ''ส่วนนี้ลอกมาจาก [http://garnet.cpe.ku.ac.th/~jtf/dm/?q=node/31 การโปรแกรมเชิงวัตถุในไพทอน] ของ [http://www.cpe.ku.ac.th/~jtf/ จิตรทัศน์ ฝักเจริญผล]'' |
ภาษา Python รองรับการโปรแกรมเชิงวัตถุในรูปแบบที่ค่อนข้างจำกัด ยกตัวอย่างเช่น ภาษาไม่มีกระบวนการจัดการซ่อนข้อมูลที่สมบูรณ์นัก อย่างไรก็ตามเนื่องจากภาษา Python เป็นภาษาเชิงพลวัติทำให้เราได้ความคล่องตัวหลาย ๆ อย่างกลับมาแทน ในส่วนนี้เราจะได้ศึกษาเกี่ยวกับเรื่องดังกล่าว | ภาษา Python รองรับการโปรแกรมเชิงวัตถุในรูปแบบที่ค่อนข้างจำกัด ยกตัวอย่างเช่น ภาษาไม่มีกระบวนการจัดการซ่อนข้อมูลที่สมบูรณ์นัก อย่างไรก็ตามเนื่องจากภาษา Python เป็นภาษาเชิงพลวัติทำให้เราได้ความคล่องตัวหลาย ๆ อย่างกลับมาแทน ในส่วนนี้เราจะได้ศึกษาเกี่ยวกับเรื่องดังกล่าว | ||
− | |||
เราสามารถประกาศคลาส Dog พร้อมด้วยเมท็อด bark ได้ดังนี้ | เราสามารถประกาศคลาส Dog พร้อมด้วยเมท็อด bark ได้ดังนี้ | ||
− | < | + | <syntaxhighlight lang="python"> |
− | + | class Dog: | |
− | + | def bark(self): | |
− | + | print "Box box" | |
− | </ | + | </syntaxhighlight> |
เราสร้าง object ของคลาส Dog โดยเรียก | เราสร้าง object ของคลาส Dog โดยเรียก | ||
แถว 46: | แถว 45: | ||
ดังนั้นเราสามารถอ้างถึงคุณลักษณะของวัตถุผ่านทางอาร์กิวเมนท์นี้ ยกตัวอย่างเช่น เราสามารถเขียนเมท็อด say_age ซึ่งพิมพ์อายุของวัตถุคลาส Dog ได้เป็น | ดังนั้นเราสามารถอ้างถึงคุณลักษณะของวัตถุผ่านทางอาร์กิวเมนท์นี้ ยกตัวอย่างเช่น เราสามารถเขียนเมท็อด say_age ซึ่งพิมพ์อายุของวัตถุคลาส Dog ได้เป็น | ||
− | < | + | <syntaxhighlight lang="python"> |
+ | def say_hello(self): | ||
+ | print 'Hello, I am', self.age, 'years old.' | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | อย่างไรก็ตาม ถ้าวัตถุนั้นไม่มีคุณลักษณะ age เมท็อดดังกล่าวจะสร้างความผิดพลาดเมื่อทำงาน เราสามารถกำหนดให้มีการระบุค่าเริ่มต้นของวัตถุในคลาสได้เมื่อสร้างวัตถุ ขึ้น โดยเขียนเมท็อด __init__ พิจารณาตัวอย่างคลาส Dog ที่สมบูรณ์ขึ้นด้านล่างนี้ | ||
+ | |||
+ | <syntaxhighlight lang="python"> | ||
+ | class Dog: | ||
+ | def __init__(self,name,age): | ||
+ | self.name = name | ||
+ | self.age = age | ||
def say_hello(self): | def say_hello(self): | ||
− | print 'Hello, I am', self.age, 'years old.' | + | print 'Hello, my name is', self.name |
+ | def say_age(self): | ||
+ | print 'I am', self.age, 'years old' | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ตัวอย่างการใช้งานเช่น | ||
+ | |||
+ | <pre title="interpreter"> | ||
+ | >>> d = Dog('dang',3) | ||
+ | >>> d.say_hello() | ||
+ | Hello, my name is dang | ||
+ | >>> e = Dog('dum',4) | ||
+ | >>> e.say_age() | ||
+ | I am 4 years old | ||
</pre> | </pre> | ||
− | + | ในการเรียกเมท็อด เรายังสามารถเรียกในลักษณะนี้ได้ด้วย (เรียกเมท็อดโดยตรงจากคลาส และผ่านค่า self ให้อย่างชัดเจน) | |
− | <pre title="interpreter | + | <pre title="interpreter> |
− | >>> | + | >>> Dog.say_hello(d) |
− | + | Hello, my name is dang | |
− | |||
− | . | ||
− | |||
− | |||
− | |||
− | |||
</pre> | </pre> | ||
+ | |||
+ | การตั้งชื่ออาร์กิวเมนต์แรกของเมท็อดที่อ้างถึงวัตถุโดยธรรมเนียมแล้วนิยมตั้งว่า self อย่างไรก็ตาม เราสามารถใช้ชื่ออะไรก็ได้ อาร์กิวเมนต์ดังกล่าวจะอ้างไปถึงวัตถุที่เรียกเมท็อดนั้นเช่นเดียวกัน | ||
+ | |||
+ | {{Python Programming/Navigation|Objects|Inheritance}} |
รุ่นแก้ไขปัจจุบันเมื่อ 04:18, 4 ตุลาคม 2558
- ส่วนนี้ลอกมาจาก การโปรแกรมเชิงวัตถุในไพทอน ของ จิตรทัศน์ ฝักเจริญผล
ภาษา Python รองรับการโปรแกรมเชิงวัตถุในรูปแบบที่ค่อนข้างจำกัด ยกตัวอย่างเช่น ภาษาไม่มีกระบวนการจัดการซ่อนข้อมูลที่สมบูรณ์นัก อย่างไรก็ตามเนื่องจากภาษา Python เป็นภาษาเชิงพลวัติทำให้เราได้ความคล่องตัวหลาย ๆ อย่างกลับมาแทน ในส่วนนี้เราจะได้ศึกษาเกี่ยวกับเรื่องดังกล่าว
เราสามารถประกาศคลาส Dog พร้อมด้วยเมท็อด bark ได้ดังนี้
class Dog:
def bark(self):
print "Box box"
เราสร้าง object ของคลาส Dog โดยเรียก
>>> dang = Dog()
เมื่อเราสั่ง dang.bark() เราจะเห็นสตริง Box box ถูกพิมพ์ออกมา
>>> dang.bark() Box box
วัตถุของเราสามารถมีคุณลักษณะ (attribute) ได้ โดย attribute ในภาษาไพทอนจะมีลักษณะคล้าย public field ของภาษา C หรือ Java เราสามารถสั่ง
>>> dang.age = 100
เพื่อกำหนดค่าให้กับคุณลักษณะ age ของวัตถุ dang ได้
สังเกตว่าเรา ไม่จำเป็น ต้องประกาศไว้ล่วงหน้าว่าวัตถุของคลาส Dog จะมีคุณลักษณะใดบ้าง อย่างไรก็ตามถ้าเราเรียกใช้คุณสมบัติที่ไม่เคยประกาศมาก่อนจะเกิดข้อผิดพลาดขึ้น เช่น
>>> dang.speed Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: Dog instance has no attribute 'speed'
สังเกตเมท็อด bark ในเมท็อดดังกล่าวมีการระบุอาร์กิวเมนต์ self ที่ไม่ได้เรียกใช้เอาไว้ อาร์กิวเมนต์ดังกล่าวจะอ้างถึงวัตถุที่เรียกใช้เมท็อดดังกล่าวอยู่ ยกตัวอย่างเช่น เมื่อเราสั่ง d.bark() อาร์กิวเมนต์ self จะอ้างไปยังวัตถุ d ให้อัตโนมัติ
ดังนั้นเราสามารถอ้างถึงคุณลักษณะของวัตถุผ่านทางอาร์กิวเมนท์นี้ ยกตัวอย่างเช่น เราสามารถเขียนเมท็อด say_age ซึ่งพิมพ์อายุของวัตถุคลาส Dog ได้เป็น
def say_hello(self):
print 'Hello, I am', self.age, 'years old.'
อย่างไรก็ตาม ถ้าวัตถุนั้นไม่มีคุณลักษณะ age เมท็อดดังกล่าวจะสร้างความผิดพลาดเมื่อทำงาน เราสามารถกำหนดให้มีการระบุค่าเริ่มต้นของวัตถุในคลาสได้เมื่อสร้างวัตถุ ขึ้น โดยเขียนเมท็อด __init__ พิจารณาตัวอย่างคลาส Dog ที่สมบูรณ์ขึ้นด้านล่างนี้
class Dog:
def __init__(self,name,age):
self.name = name
self.age = age
def say_hello(self):
print 'Hello, my name is', self.name
def say_age(self):
print 'I am', self.age, 'years old'
ตัวอย่างการใช้งานเช่น
>>> d = Dog('dang',3) >>> d.say_hello() Hello, my name is dang >>> e = Dog('dum',4) >>> e.say_age() I am 4 years old
ในการเรียกเมท็อด เรายังสามารถเรียกในลักษณะนี้ได้ด้วย (เรียกเมท็อดโดยตรงจากคลาส และผ่านค่า self ให้อย่างชัดเจน)
>>> Dog.say_hello(d) Hello, my name is dang
การตั้งชื่ออาร์กิวเมนต์แรกของเมท็อดที่อ้างถึงวัตถุโดยธรรมเนียมแล้วนิยมตั้งว่า self อย่างไรก็ตาม เราสามารถใช้ชื่ออะไรก็ได้ อาร์กิวเมนต์ดังกล่าวจะอ้างไปถึงวัตถุที่เรียกเมท็อดนั้นเช่นเดียวกัน
หน้าก่อน: Objects | สารบัญ | หน้าต่อไป: Inheritance |