Jos*_*son 35 python class-method
防爆.
如果我有这样的事情:
class C(object):
@classmethod
def f(cls, x):
return x + x
Run Code Online (Sandbox Code Playgroud)
这将有效:
c = C()
c.f(2)
4
Run Code Online (Sandbox Code Playgroud)
但这是不好的形式?我应该只打电话
C.f()
Run Code Online (Sandbox Code Playgroud)
要么
c.__class__.f()
Run Code Online (Sandbox Code Playgroud)
显然,这只有在f不与self/cls相互作用的情况下才有意义.
?
Ton*_*uža 31
如果您想从实例调用类方法,则可能不需要类方法.
在这个例子中,你给出一个静态方法更合适,因为你的最后一句话(没有自我/ cls交互).
class C(object):
@staticmethod
def f(x):
return x + x
Run Code Online (Sandbox Code Playgroud)
这样做两者都是"好形式"
c = C()
c.f(2)
Run Code Online (Sandbox Code Playgroud)
和
C.f(2)
Run Code Online (Sandbox Code Playgroud)
Mat*_*ood 10
我不记得在类之外使用这样的类方法,但是实例方法可以自己调用类方法(例如self.foo(),在哪里foo是类方法).这可以确保继承按预期方式执行,并将调用.foo()正确的子类而不是基类.
| 归档时间: |
|
| 查看次数: |
17420 次 |
| 最近记录: |