في البداية، يبدو أن هناك سوء فهم في كيفية استخدام الدوال في الفئة التي قمت بتعريفها. في الوقت الحالي، يوجد خطأ في كيفية تعريف دالة CalcDates
واستخدامها.
لفهم هذا السؤال بشكل أفضل، دعوني أشرح لك كيف يعمل الكود حاليًا:
تعريفك الحالي للدالة CalcDates
هو:
pythondef CalcDates(self, Days1): # Determine dates
# ... (الكود الباقي)
هذه الدالة تتوقع متغيرًا يسمى Days1
كواحد من الوسائط. عند استدعاءها هكذا:
pythonD1= Curl.CalcDates(90)
أنت ببساطة تقوم بتمرير قيمة 90
إلى المتغير Days1
. ولكن المشكلة هي أنك تستخدم self.Days1
في داخل الدالة دون أن تمرره كوسيلة طريقة للفئة.
لحل هذه المشكلة، يمكنك تعديل تعريف الدالة لتأخذ self
أيضًا كوسيلة طريقة، مما يتيح لها الوصول إلى متغيرات الفئة. يمكنك فعل ذلك على النحو التالي:
pythondef CalcDates(self, Days1=None): # Determine dates
if Days1 is None:
Days1 = self.Days1
# ... (الكود الباقي)
بهذا التعديل، إذا لم يتم تمرير قيمة لـ Days1
عند استدعاء الدالة، ستتم استخدام قيمة self.Days1
التي قمت بتعريفها في __init__
كقيمة افتراضية.
الآن يمكنك استدعاء الدالة بشكل مباشر كما تريد:
pythonD1 = Curl.CalcDates(90)
أو يمكنك استدعاءها دون تحديد قيمة لـ Days1
وستستخدم القيمة الافتراضية:
pythonD1 = Curl.CalcDates()
هذا يجعل الفئة أكثر مرونة في استخدامها مع توفير القيم الافتراضية عند الضرورة.
المزيد من المعلومات
في هذا السياق، يجب أن نلقي نظرة على كيفية تصميم الكود والفهم الصحيح لتبادل البيانات بين الدوال داخل الفئة. يبدو أن هناك بعض اللبس في الاستخدام الصحيح للمتغيرات والدوال.
أولًا، دعوني أوضح بعض النقاط:
- في تعريف الدالة
__init__
:
pythondef __init__(self):
self.file7 = file7
self.Days1 = Days1
لديك الآن self.Days1
كمتغير داخلي في الفئة. ومع ذلك، لاحظ أنه يجب عليك تمرير file7
و Days1
كوسائط إلى الدالة __init__
. لذلك، يمكن تحديثها كما يلي:
pythondef __init__(self, file7, Days1):
self.file7 = file7
self.Days1 = Days1
- بالنسبة للدالة
readfile
، يمكنك تحسينها لتجعل استخدامfile7
المتاح كمتغير داخلي، لذلك لا داعي لتمريرها كوسيطة:
pythondef readfile(self):
ticknum = 0
read_ticker = []
with open(self.file7, "r") as ins:
for line in ins:
if line.endswith('\n'):
line = line[:-1]
read_ticker.append(line)
ticknum += 1
return read_ticker
- في دالة
CalcDates
، يبدو أن هناك خلط بينDays1
كوسيط وself.Days1
كمتغير داخلي. يمكنك تحديثها لتفادي هذا اللبس:
pythondef CalcDates(self, Days1=None): # Determine dates
if Days1 is None:
Days1 = self.Days1
# ... (الكود الباقي)
بتحديث هذه النقاط، يمكنك الآن استخدام الفئة بشكل أكثر وضوحًا وتبادل البيانات بشكل صحيح بين الدوال. يُفضل أيضًا استخدام بنية السياق (with
) عند فتح الملفات للتأكد من إغلاقها بشكل صحيح حتى في حالة حدوث استثناء.