2016-07-10 25 views
0

Ich versuche, eine Basisklasse (scipy.stats.multivariate_normal) zu verlängern, aber ich einige Schwierigkeiten, die mit Aufruf super ‚s __init__:Ärger erstreckt scipy.stats.multivariate_normal [__init __() nimmt von 1 bis 2 Positionsargumente]

from scipy.stats import multivariate_normal 
class MVGaussian(multivariate_normal): 
    def __init__(self, *args, **kwargs): # I want base class to handle all the arguments 
     super(MVGaussian, self).__init__(*args,**kwargs) 
    # def myMethod ... 

ich bekomme immer TypeError: __init__() takes from 1 to 2 positional arguments but 4 were given

ich habe auch versucht super().__init__(*args,**kwargs), oder einfach nur multivariate_normal.__init__(*args, **kwargs) ...

Antwort

3

Sie versuchenUnterklasse, aber es ist nicht eine Klasse ist, dann ist es eine Instanz einer Klasse, die definiert eine __call__ Methode: Unterklasse scipy.stats._multivariate.multivariate_normal_gen eine Instanz der Klasse zu

In [24]: isinstance(multivariate_normal, scipy.stats._multivariate.multivariate_normal_gen) 
Out[24]: True 

Sie werden und machen es wie multivariate_normal zu verhalten :

from scipy.stats._multivariate import multivariate_normal_gen 

class MVGaussian(multivariate_normal_gen): 
    def __init__(self, *args, **kwargs): 
     super(MVGaussian, self).__init__(*args,**kwargs) 

mv_gaussian = MVGaussian() 

Blick auf den Quellcode für weitere Informationen: https://github.com/scipy/scipy/blob/8a6cf90358c40ab525dc4de5ffa74e4eed163eed/scipy/stats/_multivariate.py#L220-L430

+0

Dank! Was ich wirklich erweitern möchte, ist 'multivariate_normal_frozen' – ladiesman