|  |      1sillyousu      2014-02-02 18:12:02 +08:00  1 Python 本来就没有重载这一说的。 貌似 普通的method 会把 classmethod 覆盖的。 | 
|      3ritksm      2014-02-02 18:20:46 +08:00  1 我想知道这样写的实际意义在哪里。为什么会有一个class method和instance method重名,能举个不是foobar的例子么。。 再说了明明不能重载的嘛,方法重载的意义在于对于静态类型的语言,可以区别不同的方法,但是对于Python直接*args **kwargs不就可以了么,然后在方法逻辑里判断 | 
|      4ritksm      2014-02-02 18:21:34 +08:00 | 
|  |      5raquelken      2014-02-02 18:22:12 +08:00  1 | 
|  |      6raquelken      2014-02-02 18:23:05 +08:00 | 
|  |      7raquelken      2014-02-02 18:24:39 +08:00 <script src="https://gist.github.com/raquelken/938a5e3df4a97a038652.js"></script> | 
|  |      8raquelken      2014-02-02 18:32:53 +08:00 | 
|  |      9raquelken      2014-02-02 18:34:13 +08:00 S**t, 我放弃了 class test: def __init__(self): self.a = 1 self.foo = self._foo @classmethod def foo(cls, p, flag): pass def _foo(self, p): print(self.a) | 
|      10yangff      2014-02-02 19:18:27 +08:00  1 | 
|      11yangff      2014-02-02 19:19:46 +08:00 | 
|  |      12orzfly      2014-02-02 19:27:06 +08:00  1 | 
|  |      13wenLiangcan OP @ritksm 我想写一个豆瓣电台 api 算是 wraper 的类,额,当作练习而已啦。。有些操作可以不登录进行,所以我想登录的话就传入登录信息获得一个实例,不登录就通过 classmethod 操作。当然,也可以用 foo 和 foo_logined 这样区分,可是觉得统一命名比较好看吧。。。。 | 
|  |      14wenLiangcan OP @raquelken 原来还可以这样! | 
|      15ritksm      2014-02-02 20:33:24 +08:00 感觉应该那么写?然后全部生成一个实例,用内部逻辑去判断是不是登录了。。 http://gist.github.com/8767690 而且就算变成了class method,其实也是可以instance.foo_class_method()的...参见 http://docs.python.org/2/library/functions.html#classmethod 感觉LZ是不是和staticmethod搞混了... 感觉class method基本上都是用来做helper或者工厂方法的...比如上面那个gist的第二个例子 | 
|      16ritksm      2014-02-02 20:35:58 +08:00 | 
|  |      17wenLiangcan OP |