0Pricing
Python Academy · บทเรียน

เมธอดของอินสแตนซ์และ self

เขียนเมธอดที่ทำงานกับข้อมูลของออบเจ็กต์นั้นเอง

เมธอดของอินสแตนซ์และ self เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

บทนำ

เมธอดอินสแตนซ์ทำงานกับข้อมูลของออบเจ็กต์เฉพาะตัว โดยใช้ self เพื่อเข้าถึงและแก้ไขแอตทริบิวต์ของออบเจ็กต์นั้น

การกำหนดเมธอดอินสแตนซ์

def method(self): ภายในคลาสคือเมธอดอินสแตนซ์ เมธอดนี้จะได้รับออบเจ็กต์เป็นอาร์กิวเมนต์ตัวแรก ซึ่งก็คือ self
class Circle:
    def __init__(self, r): self.r = r
    def area(self):
        import math
        return math.pi * self.r**2
print(Circle(5).area())

การเรียกใช้เมธอด

obj.method() เป็นรูปแบบการเขียนที่สะดวกของ ClassName.method(obj) Python จะส่ง obj ให้เป็น self โดยอัตโนมัติ
class Dog:
    def __init__(self, name): self.name = name
    def bark(self): print(f'{self.name} says Woof!')
Dog('Rex').bark()

เมธอดที่ส่งคืน self

การส่งคืน self ทำให้สามารถเชื่อมต่อการเรียกเมธอดได้ เช่น builder.set_name('x').set_age(3).build().
class Builder:
    def __init__(self): self.data = {}
    def set(self, k, v):
        self.data[k] = v
        return self
    def build(self): return self.data
result = Builder().set('x',1).set('y',2).build()
print(result)

เมธอดส่วนตัวตามธรรมเนียม

เติม _ ไว้ข้างหน้าเพื่อสื่อว่า “ใช้ภายในเท่านั้น” ส่วนการเติม __ ไว้ข้างหน้าจะเรียกใช้การปรับเปลี่ยนชื่อเป็น _ClassName__method
class Account:
    def __init__(self, bal): self._bal = bal
    def _validate(self, amount): return amount > 0
    def deposit(self, amount):
        if self._validate(amount):
            self._bal += amount
a = Account(100)
a.deposit(50)
print(a._bal)

พร็อพเพอร์ตีในรูปแบบเมธอด

@property เปลี่ยนเมธอดให้เป็นแอตทริบิวต์ที่อ่านได้ ไม่จำเป็นต้องใส่วงเล็บเมื่อเข้าถึง
class Circle:
    def __init__(self, r): self.r = r
    @property
    def diameter(self): return self.r * 2
c = Circle(5)
print(c.diameter)  # no ()

การเปลี่ยนแปลงสถานะ

เมธอดที่แก้ไขแอตทริบิวต์ของ self จะเปลี่ยนสถานะของออบเจ็กต์ ควรออกแบบเมธอดให้มีจุดประสงค์ชัดเจนว่าเป็นการสอบถามหรือคำสั่ง
class Stack:
    def __init__(self): self.items = []
    def push(self, x): self.items.append(x)
    def pop(self): return self.items.pop()
    def peek(self): return self.items[-1]
s = Stack()
s.push(1); s.push(2)
print(s.pop(), s.peek())

การเปรียบเทียบออบเจ็กต์

โดยค่าเริ่มต้น == จะเปรียบเทียบเอกลักษณ์ของออบเจ็กต์ ให้กำหนด __eq__ หากต้องการเปรียบเทียบตามค่า
class Point:
    def __init__(self, x, y): self.x,self.y=x,y
    def __eq__(self, other): return self.x==other.x and self.y==other.y
print(Point(1,2)==Point(1,2))

โพรโทคอลการวนซ้ำ

กำหนด __iter__ และ __next__ เพื่อทำให้คลาสสามารถวนซ้ำได้ และใช้งานในลูป for ได้
class Countdown:
    def __init__(self, n): self.n = n
    def __iter__(self): return self
    def __next__(self):
        if self.n <= 0: raise StopIteration
        self.n -= 1; return self.n + 1
print(list(Countdown(3)))

โพรโทคอลตัวจัดการบริบท

กำหนด __enter__ และ __exit__ เพื่อทำให้คลาสใช้งานกับคำสั่ง with ได้
class Timer:
    def __enter__(self):
        import time
        self.start = time.time()
        return self
    def __exit__(self, *args):
        import time
        print(f'elapsed: {time.time()-self.start:.3f}s')
with Timer(): pass

เมธอดกับฟังก์ชัน

เมื่อเข้าถึงผ่านคลาส Dog.bark จะเป็นฟังก์ชันธรรมดา แต่เมื่อเข้าถึงผ่านอินสแตนซ์ d.bark จะเป็นเมธอดที่ผูกไว้ โดย self จะถูกเติมให้ล่วงหน้า
class Dog:
    def bark(self): print('woof')
print(type(Dog.bark))
print(type(Dog().bark))

ตรวจสอบอย่างรวดเร็ว

การเชื่อมต่อการเรียกเมธอดคืออะไร และเมธอดต้องส่งคืนค่าใดจึงจะรองรับการทำงานนี้

ทบทวน

เมธอดอินสแตนซ์: def m(self) เรียกใช้ด้วย obj.m() ส่งคืน self เพื่อเชื่อมต่อการเรียก เมธอด __eq__/__iter__/__enter__/__exit__ ใช้ดำเนินการตามโพรโทคอล การเติม _ ไว้ข้างหน้าสื่อว่าใช้ภายใน

เรียนต่อไป

ยอดเยี่ยมมาก! โปรดเรียนบทถัดไปต่อเพื่อพัฒนาทักษะของคุณให้ลึกซึ้งยิ่งขึ้น

คำถามที่พบบ่อย

บทเรียน “เมธอดของอินสแตนซ์และ self” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “เมธอดของอินสแตนซ์และ self” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “เมธอดของอินสแตนซ์และ self”

เขียนเมธอดที่ทำงานกับข้อมูลของออบเจ็กต์นั้นเอง คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “เมธอดของอินสแตนซ์และ self” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม

ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. คลาสและเมธอด __init__
  2. แอตทริบิวต์ของอินสแตนซ์กับคลาส
  3. เมธอดของอินสแตนซ์และ self
  4. เมธอดพิเศษ: __str__ และ __repr__
← กลับไปที่ Python Academy