Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中使用@classmethod,并创建一个备用构造函数_Python_Python Decorators - Fatal编程技术网

在Python中使用@classmethod,并创建一个备用构造函数

在Python中使用@classmethod,并创建一个备用构造函数,python,python-decorators,Python,Python Decorators,除了创建一个“重载”(我想不是真的重载,因为方法名不同于init)构造函数之外,我还试图考虑@classmethod特殊decorator的用例,但想不出任何 我查看过类似的帖子,但只能找到指向替代构造函数的用例 我能想到的另一种情况是将一个方法与一个类结合起来封装相关逻辑(正如上面链接的帖子中@samplebias提到的),但我认为@staticmethod更适合将相关逻辑封装到一个类中(正如@samplebias在帖子中评论的那样) 有人能帮我确定这个特殊的装饰器的一些额外的用例吗?我正在浏

除了创建一个“重载”(我想不是真的重载,因为方法名不同于init)构造函数之外,我还试图考虑@classmethod特殊decorator的用例,但想不出任何

我查看过类似的帖子,但只能找到指向替代构造函数的用例

我能想到的另一种情况是将一个方法与一个类结合起来封装相关逻辑(正如上面链接的帖子中@samplebias提到的),但我认为@staticmethod更适合将相关逻辑封装到一个类中(正如@samplebias在帖子中评论的那样)


有人能帮我确定这个特殊的装饰器的一些额外的用例吗?

我正在浏览一些关于Python面向对象编程的资料,发现了一个除了作为重载构造函数之外的
@classmethod
装饰器的用例

当直接对类对象进行操作(更改)时,使用类方法是有意义的。例如,如果您有一个
Employee
对象和
base\u raise\u factor
作为类变量,那么在Employee上创建一个类方法来更改此变量是有意义的


你可能会说我们可以直接将
Employee.base\u raise\u factor
设置为某个值,但我认为最好坚持
封装,而不是直接修改内部。另外,我们可以在类方法中定义一些额外的逻辑来更新
base\u raise\u factor

,我只将它用于替代构造函数。我从未使用过@StaticMethod如果我有一个基类和4个子类继承自基类,我想修改流逻辑或根据调用该方法的子类更改部分流逻辑。然后我需要调用此方法的(子)类。然后我需要classmethod。另一个用例可能是为新实例设置默认值(例如,对于与网络相关的东西,您可能需要设置默认超时、默认主机等)。您可以通过设置类的属性来实现这一点,但是如果想要同时设置多个属性是很常见的,那么一个类方法可能会很方便。。。那么基本上是一个我们想要定义一个修改类属性的方法的例子?我认为这是有道理的,因为静态方法并不是真正用来改变类的?静态方法不能改变类,因为它们没有对它的引用。(好吧,它们可以通过类的名称进行访问,但这会破坏继承。)