防爆.
如果我有这样的事情:
class C(object): @classmethod def f(cls, x): return x + x
这将有效:
c = C() c.f(2) 4
但这是不好的形式?我应该只打电话
C.f()
要么
c.__class__.f()
显然,这只有在f不与self/cls相互作用的情况下才有意义.
?
如果您想从实例调用类方法,则可能不需要类方法.
在这个例子中,你给出一个静态方法更合适,因为你的最后一句话(没有自我/ cls交互).
class C(object): @staticmethod def f(x): return x + x
这样做两者都是"好形式"
c = C() c.f(2)
和
C.f(2)
我不记得在类之外使用这样的类方法,但是实例方法可以自己调用类方法(例如self.foo()
,在哪里foo
是类方法).这可以确保继承按预期方式执行,并将调用.foo()
正确的子类而不是基类.
这主要是看起来令人困惑.如果我正在使用你的课程并看到这一点,它会让我想知道其他的惊喜是什么,它看起来像是糟糕的设计.
有没有理由这不仅仅是一种静态方法?