【发布时间】:2022-01-06 18:34:05
【问题描述】:
我正在编写一些代码来拟合数据的分布,因为对于 Pareto 1 分布,theta 是固定的,所以我编写了以下代码:
class ParetoI:
alpha = None
theta = None
def __init__(self, alpha, theta=.5):
self.alpha = alpha
self.theta = theta
return
def pdf(self, x):
return ParetoI.pdf(self.alpha, x, self.theta)
# Some other code
@staticmethod
def pdf(alpha, x, theta=.5):
return alpha * theta ** alpha / x ** (alpha + 1)
然后在我的主程序中,在我将分布拟合到给定的样本数据之后,我尝试绘制密度:
# par1 = ParetoI(some_args)
x_range = np.linspace(.5, 80, 200)
plt.plot(x_range, par1.pdf(x_range), label='Pareto I')
但我收到以下错误:
TypeError: pdf() missing 1 required positional argument: 'x'
我认为这是因为我从 par1.pdf 调用了广义的静态函数。如何修复此代码?我是否根本不允许拥有与类方法同名的静态函数?我想这很容易通过简单地删除静态函数来解决,但我认为能够在不实例化对象以供进一步使用的情况下使用这些分布可能很方便。这是糟糕的设计吗?
【问题讨论】:
-
Python 不支持方法重载。目前尚不清楚您在这里期望什么。每次使用相同的名称时,它都会覆盖之前的内容。
-
类方法和静态方法不能同名。只有一本字典。
-
注意,您可以只创建一个常规函数,这通常是您在 Python 中所做的。 IMO
staticmethod的存在是因为一堆 Java 程序员抱怨 -
@juanpa.arrivillaga 它们也有利于不被数百万个函数名污染命名空间。
标签: python typeerror static-methods