【发布时间】:2018-06-02 07:14:15
【问题描述】:
除了创建一个“重载”(我猜不是真的重载,因为方法名称与 init 不同)构造函数之外,我还试图考虑 @classmethod 特殊装饰器的用例,但不能什么都想不到。
我查看了 What's an example use case for a Python classmethod? 之类的帖子,但只能找到指向备用构造函数的用例。
我能想到的另一种情况是将方法与类耦合以封装相关逻辑(如上面链接的帖子中的@samplebias 所述),但我认为@staticmethod 更适合将相关逻辑封装到类中(正如有人评论@samplebias 的帖子)。
谁能帮我确定这个特殊装饰器的一些其他用例吗?
【问题讨论】:
-
我只将它用于替代构造函数。我从未使用过@staticmethod
-
如果我有一个基类和 4 个从基类继承的子类,我想根据调用方法的子类修改流程逻辑或更改部分流程逻辑。然后我需要调用此方法的(子)类。然后我需要classmethod。
-
另一个用例可能是为新实例设置默认值(例如,对于与网络相关的内容,您可能希望设置默认超时、默认主机等)。您可以通过设置类的属性来做到这一点,但如果想要一次设置多个属性是很常见的,那么类方法可能会很方便。
-
嗯...所以基本上是我们想要定义一个修改类属性的方法的情况?我认为这是有道理的,因为静态方法并不是真的要改变类?
-
静态方法不能改变类,因为它们没有得到对它的引用。 (嗯,他们可以通过类的名称,但这会破坏继承。)