คำถามนี้เป็นคำถามที่ค่อนข้างภาษาไม่เชื่อเรื่องพระเจ้า แต่ไม่สมบูรณ์ตั้งแต่โปรแกรมเชิงวัตถุ (OOP) อยู่ในที่แตกต่างกันเช่นJava , ซึ่งไม่ได้มีฟังก์ชั่นชั้นแรกมากกว่าที่เป็นอยู่ในหลาม
กล่าวอีกนัยหนึ่งฉันรู้สึกผิดน้อยลงสำหรับการสร้างคลาสที่ไม่จำเป็นในภาษาเช่น Java แต่ฉันรู้สึกว่าอาจมีวิธีที่ดีกว่าในภาษาที่มีจำนวนต้นแบบน้อยลงเช่น Python
โปรแกรมของฉันต้องทำการดำเนินการที่ค่อนข้างซับซ้อนหลายครั้ง การดำเนินการนั้นต้องใช้ "การบันทึกบัญชี" จำนวนมากต้องสร้างและลบไฟล์ชั่วคราวบางไฟล์ ฯลฯ
นั่นเป็นเหตุผลที่มันยังต้องการเรียก "suboperations" อื่น ๆ อีกมากมาย - การใส่ทุกอย่างลงในวิธีการอันใหญ่โตนั้นไม่ได้ดีมากโมดุลอ่านได้ ฯลฯ
ต่อไปนี้เป็นแนวทางที่อยู่ในใจของฉัน:
1. สร้างคลาสที่มีวิธีพับลิกเพียงวิธีเดียวเท่านั้นและรักษาสถานะภายในที่จำเป็นสำหรับการปฏิบัติการย่อยในตัวแปรอินสแตนซ์
มันจะมีลักษณะเช่นนี้:
class Thing:
def __init__(self, var1, var2):
self.var1 = var1
self.var2 = var2
self.var3 = []
def the_public_method(self, param1, param2):
self.var4 = param1
self.var5 = param2
self.var6 = param1 + param2 * self.var1
self.__suboperation1()
self.__suboperation2()
self.__suboperation3()
def __suboperation1(self):
# Do something with self.var1, self.var2, self.var6
# Do something with the result and self.var3
# self.var7 = something
# ...
self.__suboperation4()
self.__suboperation5()
# ...
def suboperation2(self):
# Uses self.var1 and self.var3
# ...
# etc.
ปัญหาที่ฉันเห็นด้วยวิธีนี้คือสถานะของคลาสนี้เหมาะสมเฉพาะภายในและไม่สามารถทำอะไรกับอินสแตนซ์ของมันได้ยกเว้นเรียกวิธีการสาธารณะเท่านั้น
# Make a thing object
thing = Thing(1,2)
# Call the only method you can call
thing.the_public_method(3,4)
# You don't need thing anymore
2. สร้างกลุ่มของฟังก์ชันที่ไม่มีคลาสและส่งผ่านตัวแปรที่จำเป็นภายในต่างๆระหว่างพวกเขา (เป็นอาร์กิวเมนต์)
ปัญหาที่ฉันเห็นด้วยคือฉันต้องผ่านตัวแปรจำนวนมากระหว่างฟังก์ชั่น นอกจากนี้ฟังก์ชั่นจะเกี่ยวข้องกันอย่างใกล้ชิด แต่จะไม่ถูกจัดกลุ่มเข้าด้วยกัน
3. ชอบ 2. แต่ทำให้ตัวแปรสถานะเป็นโกลบอลแทนที่จะส่งต่อ
นี่คงไม่ดีเลยตั้งแต่ฉันต้องทำงานมากกว่าหนึ่งครั้งด้วยอินพุตที่แตกต่างกัน
มีวิธีที่สี่ดีกว่าหรือไม่? ถ้าไม่วิธีใดวิธีหนึ่งเหล่านี้จะดีกว่าและทำไม มีบางอย่างที่ฉันขาดหายไปหรือไม่?