我只是在处理一个大型的层次结构,并认为类中的所有方法都可能是默认的classmethods。
我的意思是,很少需要更改对象的实际方法,并且可以显式传递所需的任何变量。此外,通过这种方式,人们可以改变对象本身的方法数量较少(更多的打字方式可以用另一种方式进行),而人们更倾向于使用"功能性"默认情况下。
但是,我是 newb ,并希望找出我的想法中的缺陷(如果有的话)。
答案 0 :(得分:3)
将类方法作为默认值是一个众所周知但过时的范例。它被称为模块化编程。你的课程以这种方式成为有效的模块。
面向对象范式(OOP)主要被认为优于模块化范式(并且它更年轻)。主要区别在于,默认情况下,部分代码与一组数据(称为对象)相关联 - 因此不是类方法。
事实证明,这更有用。结合其他OOP架构思想,如继承,这提供了在开发人员头脑中表示模型的直接方法。
使用对象方法我可以编写可用于各种类型对象的抽象代码;在编写例行程序时,我不必知道对象的类型。 E. g。我可以编写一个max()
例程,将列表中的元素相互比较以找到最大的元素。然后使用>
运算符进行比较,该运算符实际上是元素的对象方法(在Python中,这是__gt__()
,在C ++中它将是operator>()
等。现在,对象本身(可能是一个数字,可能是一个日期等)可以处理自身与另一个类型的比较。在代码中,这可以写为
a > b # in Python this calls a.__gt__(b)
虽然只有classmethods,你必须把它写成
type(a).__gt__(a, b)
更不易读。
答案 1 :(得分:1)
如果方法不访问任何对象的状态,但是特定于该对象的类,则它是一个很好的候选者,可以成为一个类方法。
否则,如果它更通用,那么只需使用在模块级别定义的函数,不需要使其属于特定类。
我发现在实践中,类方法实际上非常罕见,当然不是默认方法。应该有很多好的代码(例如github)来获取示例。