Problem z klasami w Pythonie - pass

0

Hej nie jestem wybitnym programistą i natknąłem się na coś czego nie rozumiem. Mianowicie mam taki kod:


import matplotlib.pyplot as plt
from QuantLib import*
import numpy as np

today = Date(17, October, 2016)
calendar = TARGET()  
settlement = calendar.advance(today, 3, Days)

I zmienna settlement to 20 october 2016, czyli 3 dni po zmiennej today. Problem jest taki że chciałbym znalezc co robi funkcja calendar.advance i w tym celu udaje sie do biblioteki QuantLib i mam po kolei cos takiego:

class TARGET(Calendar):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self):
        _QuantLib.TARGET_swiginit(self, _QuantLib.new_TARGET())
    __swig_destroy__ = _QuantLib.delete_TARGET

class Calendar(object):
    def advance(self, *args):
        return _QuantLib.Calendar_advance(self, *args)

I w pliku _QuantLib:

def Calendar_advance(*args, **kwargs): # real signature unknown
    pass

Czy pass nie oznaczalo czasem ze funkcja nic nie robi? Dlaczego zatem calendar.advance(today, 3, Days) zwraca date o 3 dni pozniejsza niz data today? Gdzie mam tego szukac?

2

Problem tkwi w tym, że Ty się nie udałeś do _QuantLib. On nie jest zaimplementowany w ogóle w Pythonie, tylko jest linkowany z binarki stworzonej w jakimś innym języku — w tym konkretnym przypadku w C++.

IDE Ci zatem nie może wyświetlić jej kodu, bo go nie ma dostępnego; zatem robi co może — a szczytem jego możliwości jest właśnie taka bezużyteczna deklaracja.

Jak się zorientować, że mamy do czynienia z taką sytuacją? Kluczową podpowiedzią jest bezużyteczność kodu, ale są inne: tutaj jest to # real signature unknown — IDE Ci wprost mówi, że nie ma pojęcia, jak wygląda sygnatura tej funkcji. Kolejnym kawałkiem układanki jest sprawdzenie sobie w sieci, co to jest za biblioteka, z którą mamy do czynienia. I tak, możemy się dowiedzieć, że to jest:

Python bindings for the QuantLib library

Czyli sam binding, a implementacja jest w czymś innym. I znowu, można sobie znaleźć na PyPI, że kod źródłowy samego QuantLib jest na GitHubie i tam dalej szukać potrzebnych funkcji.

EDYCJA: Wygląda na to, że znalazłem: https://github.com/lballabio/QuantLib/blob/master/ql/time/calendar.cpp#L110

0

@Althorion: Dzięki wielkie :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1