我有以下课程(将用于扩展现有的课程scipy.stats.pareto):

class pareto(scipy.stats.pareto):
    def __init__(self, b):
        super().init(b)
        return


当我现在运行以下代码时:

u=pareto(2)
u.cdf(1)


我得到一个错误。但是,当我运行以下代码时:

u=scipy.stats.pareto(2)
u.cdf(1)


代码运行并返回0.0。我希望第一个代码段也能做到吗?

最佳答案

scipy.stats.pareto不是类。它是一个类的实例:

scipy.stats.distributions.pareto_gen


我们可以为自己的类构建类似的接口,例如:

码:

import scipy.stats as stats

class pareto(stats.distributions.pareto_gen):

    def __new__(cls, *args, **kwargs):
        # get a `pareto` instance
        self = stats.distributions.pareto_gen(a=1.0, name="pareto")

        # call the instance with desired setup
        return self(*args, **kwargs)

    def __init__(self, *args, **kwargs):
        # already called __init__()
        pass


测试代码:

u = stats.pareto(2)
print(u.cdf(1))

u = pareto(2)
print(u.cdf(1))


结果:

0.0
0.0

10-06 14:50