12: Class & Object

12-1: Object Construction

** ถ้าใช้งานบนมือถือหรือ tablet แนะนำให้ใช้ Chrome หรือ Safari เท่านั้น **

แบบฝึกหัด 12-1 ข้อที่ 1

คลาส Point มีไว้ผลิตอ็อบเจกต์ที่แทนจุดในระนาบสองมิติ จงสร้างจุดที่พิกัด (4, 5) เก็บในตัวแปร p1

class Point: def __init__(self, x, y): self.x = x self.y = y class Point: def __init__(self, x, y): self.x = x self.y = y p1 = Point(4, 5) var = "p1" obj = Ex().check_object(var, missing_msg = "ไม่พบตัวแปร " + var) obj.multi( has_equal_value(expr_code="str(type("+var+"))", incorrect_msg = var + " ต้องเป็นอ็อบเจกต์ของ Point"), has_equal_value(expr_code = var + ".x", incorrect_msg = "พิกัด x ไม่ถูกต้อง"), has_equal_value(expr_code = var + ".y", incorrect_msg = "พิกัด y ไม่ถูกต้อง") )
แบบฝึกหัด 12-1 ข้อที่ 2

คลาส Date มีไว้ผลิตอ็อบเจกต์ที่แทนวันเดือนปี จงสร้างอ็อบเจกต์ของวันที่ 8 กันยายน 2538 เก็บในตัวแปร d (วันเดือนปีที่เก็บในอ็อบเจกต์เป็นจำนวนเต็ม และเลขปีเป็นปี ค.ศ. แต่ __init__ รับปี พ.ศ.)

class Date: def __init__(self, a, b, c): self.day = c self.month = b self.year = a - 543 class Date: def __init__(self, a, b, c): self.day = c self.month = b self.year = a - 543 d = Date(2538, 9, 8) var = "d" obj = Ex().check_object(var, missing_msg = "ไม่พบตัวแปร " + var) obj.multi( has_equal_value(expr_code="str(type("+var+"))", incorrect_msg = var + " ต้องเป็นอ็อบเจกต์ของ Date"), has_equal_value(expr_code = var + ".day", incorrect_msg = "เลขวันไม่ถูกต้อง"), has_equal_value(expr_code = var + ".month", incorrect_msg = "เลขเดือนไม่ถูกต้อง"), has_equal_value(expr_code = var + ".year", incorrect_msg = "เลขปีไม่ถูกต้อง") )
แบบฝึกหัด 12-1 ข้อที่ 3

คลาส Point มีไว้ผลิตอ็อบเจกต์ที่แทนจุดในระนาบสองมิติ จงสร้างลิสต์ที่เก็บจุด 3 จุดในตัวแปร t โดยที่จุดทั้งสามเป็นจุดยอดของสามเหลี่ยมมุมฉากที่มีด้านยาว 3, 4 และ 5

class Point: def __init__(self, x, y): self.x = x self.y = y class Point: def __init__(self, x, y): self.x = x self.y = y t = [Point(0,0), Point(0,3), Point(4,0)] def dist2(p1, p2): dx = p1.x - p2.x dy = p1.y - p2.y return round(dx**2 + dy**2, 8) def check_tri(x1, x2): d1 = sorted(dist2(x1[i], x1[(i+1)%len(x1)]) for i in range(len(x1))) d2 = sorted(dist2(x2[i], x2[(i+1)%len(x1)]) for i in range(len(x1))) return d1 == d2 var = "t" obj = Ex().check_object(var, missing_msg = "ไม่พบตัวแปร " + var) obj.multi( has_equal_value(expr_code="type("+var+")", incorrect_msg = var + " ต้องเป็นลิสต์"), has_equal_value(expr_code="len("+var+")", incorrect_msg = var + " ต้องมีสมาชิกจำนวน 3 อ็อบเจกต์"), has_equal_value(expr_code="[str(type("+var+"[i])) for i in range(len(" + var + "))]", incorrect_msg = "อ็อบเจกต์ใน " + var + " ต้องเป็น Point"), has_equal_value(func=check_tri, incorrect_msg = "ตั้งค่าไม่ตรงตามโจทย์"), )