【发布时间】:2019-02-17 17:57:28
【问题描述】:
我有以下带有函数的类:
class A:
def myfn():
print("In myfn method.")
这里,函数没有self 作为参数。它也没有 @classmethod 或 @staticmethod 作为装饰器。但是,如果使用类调用它,它可以工作:
A.myfn()
输出:
In myfn method.
但是如果从任何实例调用都会报错:
a = A()
a.myfn()
错误输出:
Traceback (most recent call last):
File "testing.py", line 16, in <module>
a.myfn()
TypeError: myfn() takes 0 positional arguments but 1 was given
可能是因为self 也作为参数发送。
这会调用什么样的函数?它会是一个静态函数吗?在类中使用这样的函数是否可取?有什么缺点?
编辑:此函数仅在使用类而不是对象/实例调用时有效。我的主要问题是这样的函数叫什么?
Edit2:从答案看来,这种类型的函数尽管是最简单的形式,但不被接受为合法的。但是,由于在许多答案中都没有提到严重的缺点,我发现这可能是一个有用的构造,尤其是在我可以根据需要调用的类中分组我自己的静态函数时。我不需要创建此类的任何实例。至少,它让我不必每次都输入@staticmethod,并使代码看起来不那么复杂。它也可以巧妙地派生出来,以便有人扩展我的课程。尽管所有这些功能都可以保留在顶级/全局级别,但将它们保留在类中更加模块化。但是,我觉得应该为这样一个以这种特定方式工作的简单构造指定一个特定的名称,并且它应该被认为是合法的。它还可以帮助初学者理解为什么 Python 类中的常用函数需要 self 参数。这只会增加这种伟大语言的简单性。
【问题讨论】: