Видимость атрибутов класса python - PullRequest
0 голосов
/ 27 сентября 2018

Я довольно новичок в Python и пытаюсь написать класс-оболочку для некоторых объектов подкачки Quantlib.Проблема в том, что я пытаюсь вызвать объект Qualtlib Schedule, используя атрибуты, которые были либо переданы в конструктор, либо вычислены в конструкторе.Проблема в том, что когда я запускаю код как таковой,

 import swapleg as sl

Leg1 = sl.SwapLeg("Fix","AUD",ql.Date(26, 9, 2018),ql.Date(26, 9, 2028),ql.Monthly)
print(Leg1.EffectiveDate)
Leg1.showSchedule()

я получаю следующую ошибку

Traceback (most recent call last):
September 26th, 2018
  .......
AttributeError: type object 'SwapLeg' has no attribute 'EffectiveDate'

Код указан в списке - объект Leg1 создается, и EffectiveDate действительно устанавливается,Моя проблема заключается в том, что когда showSchedule вызывает Quantlib и вызывает ql.Schedule, он теряет видимость для EffectiveDate, даже если я смотрю на него с помощью self.EffectiveDate.Я явно что-то здесь упускаю.Любая помощь будет оценена.

import QuantLib as ql

class SwapLeg:

    def __init__(self,LegType,CCY,EffectiveDate=None,TerminationDate=None,Tenor=None,Rate=None,Spread=None):
                self.LegType=LegType
                self.CCY=CCY
                self.Tenor=Tenor
                if EffectiveDate is None:
                    self.EffectiveDate = ql.Settings.instance().evaluationDate
                else:
                    self.EffectiveDate =EffectiveDate
                ......

    def _LegSchedule(self):
        ls = ql.Schedule(   self.EffectiveDate,
                            self.TerminationDate,
                            self.Tenor,
                            self.Calendar,
                            self.businessDayConvention,
                            self.businessDayConvention,
                            self.GenRule,
                            self.EndOfMonth,
                            self.FirstDate,
                            self.NextToLastDate)
        return ls

    @classmethod
    def showSchedule(self):
        for i, d in enumerate(self._LegSchedule(self)):
            print("{0} {1}".format(i+1,d))
...