【发布时间】:2019-02-01 04:47:04
【问题描述】:
我正在为神经网络编写一个类,我想对其进行某种形式的定制,以便您可以选择不同的成本函数和正则化。为此,我想将它们设置为 __init__() 方法中的默认参数。
但是,当我在示例中通过 MyClass.static_method 时,解释器会告诉我 MyClass 尚未(尚未)定义。为什么会这样?还有比我更好的解决方法吗?
您当然可以只将静态方法设置为默认参数,但随后会出现其他问题。例如,如果我想访问函数名(我真正想要的),我不能立即使用__name__。我知道如何通过访问static_method.__func__.__name__ 以另一种方式做到这一点。但这似乎很笨拙,并且当您获得一个 staticmethod 对象时,似乎不打算以这种方式使用它。
class MyClass:
@staticmethod
def static_method():
do_something()
def __init__(self, func=MyClass.static_method, func2=static_method):
self.name = func.__name__ #Does not work
self.name2 = func2.__func__.__name__ #Should work
我确实希望MyClass.static_method 能够工作,但那时该类似乎不存在。那么,最后一次,为什么?
【问题讨论】:
-
Python 中很少使用静态方法,因为它们可以而且应该是函数。将您的静态方法设为函数(在类之前定义或导入)也应该可以解决您的问题。
-
静态方法并不少见......并且有很多适合它们的用例......我真的不明白它不是静态方法如何准确解决问题跨度>
-
@JoranBeasley 在多年的 Python 编码中,我了解了 2 个可能有用的案例,0 个应该完成的案例,以及一个原因为什么经常这样做。
标签: python oop static-methods